Kotlin (Programmiersprache)

Kotlin ist eine plattformübergreifende, statisch typisierte Programmiersprache, die in Bytecode für die Java Virtual Machine (JVM) übersetzt wird, aber auch in JavaScript-Quellcode oder (mittels LLVM) in Maschinencode umgewandelt werden kann. Kotlin lässt sich außerdem zur Entwicklung von Android- und iOS-Apps verwenden.[4] Google unterstützt seit 2017 offiziell die Entwicklung von Android-Apps in Kotlin, und diese ist seit Mai 2019 die dafür bevorzugte Sprache.[5][6]

Kotlin
Logo
Logo
Basisdaten
Paradigmen: objektorientierte Programmierung, funktionale Programmierung, imperative Programmierung, strukturierte Programmierung, deklarative Programmierung, generische Programmierung, Reflexion, nebenläufige Programmierung
Erscheinungsjahr: 2011 (erste Erscheinung)
2016 (stabil)
Designer: JetBrains
Entwickler: JetBrains und Open-Source-Entwickler
Aktuelle Version 1.9.22[1] (21. Dezember 2023)
Typisierung: Statische Typisierung, Typinferenz, starke Typisierung
Beeinflusst von: Java, Scala, C#, Groovy[2], Gosu, JavaScript
Betriebssystem: Java Virtual Machine, Dalvik Virtual Machine, JavaScript, iOS, Watch OS, tvOS, macOS, Linux, Microsoft Windows, WebAssembly
Lizenz: Apache 2[3]
kotlinlang.org

Entwicklung

Hauptsächlich wurde die Sprache von den damals in Sankt Petersburg ansässigen JetBrains-Programmierern entwickelt.[7][8] Daher stammt auch der Name: Kotlin ist eine Insel vor St. Petersburg.[9] Nach einem Jahr Entwicklung stellte JetBrains im Juli 2011 das Projekt „Kotlin“ der Öffentlichkeit als neue Sprache für die JVM vor.[10][11] Im Februar 2012 veröffentlichte JetBrains den Quellcode unter einer Apache-2-Lizenz.[12] Am 15. Februar 2016 wurde die Version 1.0 von Kotlin veröffentlicht.[13] Diese Version wird als erster offizieller Stable-Release betrachtet.

Der leitende Entwickler Dmitry Jemerow erklärte, dass die meisten Sprachen nicht die Merkmale zeigten, nach denen sie gesucht hätten, mit Ausnahme von Scala. Diese jedoch habe einen langsamen Compiler.[11] Daher war eines der erklärten Ziele für Kotlin die hohe Kompiliergeschwindigkeit, wie man sie von Java her kenne.

Tools

Auch die von JetBrains entwickelte IDE IntelliJ IDEA unterstützt seit der Version 15 Kotlin nativ via eines Plug-ins.[14][15] Für Eclipse und Visual Studio Code stehen ebenfalls Plugins zur Verfügung.[16][17][18] Es existieren zudem Plugins für Apache Maven und Gradle und ein Task für Apache Ant.[19] Die offizielle Android-Entwicklungsumgebung Android Studio unterstützt von Version 3.0 an Kotlin als native Sprache zum Entwickeln von Android-Apps.[20]

Im Java-Umfeld gibt es zahlreiche Frameworks und Bibliotheken, die bei der Test-Erstellung helfen. Da Kotlin vollständig interoperabel mit Java ist, können alle diese Tools ohne Weiteres für Tests von Kotlin-Code verwendet werden.[21]

Syntax

Die Sprache ist syntaktisch nicht zu Java kompatibel, aber so gestaltet, dass sie mit Java-Code interoperieren kann. Außerdem nutzt sie bestehenden Code der Java Class Library (JCL), z. B. das Java Collections Framework (JCF).

Anders als in Java wird bei Kotlin der Datentyp einer Variable bei ihrer Deklaration nicht vor dem Variablennamen, sondern danach, abgetrennt durch einen Doppelpunkt, notiert. Allerdings unterstützt Kotlin auch Typinferenz, sodass der Typ oft auch weggelassen werden kann, wenn er aus dem Zusammenhang klar ist. Als Anweisungsende genügt der Zeilenumbruch, ein Semikolon ist hierbei nur notwendig, wenn eine Zeile aus mehreren Anweisungen besteht.[22] Zusätzlich zu Klassen und Methoden (in Kotlin: member functions) aus der objektorientierten Programmierung unterstützt Kotlin prozedurale Programmierung unter Verwendung von Funktionen, sowie bestimmte Aspekte der funktionalen Programmierung.[23] Als Einstiegspunkt dient wie bei C u. ä. eine Main-Funktion.

Hallo Welt

Ein Programm, das die Zeichenkette „Hallo Welt“ ausgibt.

fun main() {                          // Einsprungpunkt (Main-Funktion)
    println("Hallo Welt!")            // Gib den String 'Hallo Welt!' aus
}

Funktionen

// Definition einer Funktion "funktionsBeispiel"
fun funktionsBeispiel() {
// ...
}

// Funktion mit zwei Argumenten und einem Rückgabewert
fun add(x: Int, y: Int): Int {
    return x + y
}

// Besteht eine Funktion aus nur einem Ausdruck, dürfen die geschweiften Klammern, der Rückgabetyp und das "return" weggelassen werden.
fun add2(x: Int, y: Int) = x + y

// Einsprungpunkt (Main-Funktion)
fun main(args: Array<String>) {
    // Definition einer verschachtelten Funktion, die nur in main aufgerufen werden kann.
    fun test() {
        println("Hello World!")
    }
    // Aufrufen der Funktion
    test()
}

Kontrollstrukturen

Kotlin unterstützt die gängigen Kontrollstrukturen.

If-Anweisung

// Weist der schreibgeschützten lokalen Variable 'x' die Tastatureingabe (standard input stream) als Integer-Wert zu.
val x = readLine()!!.toInt()

// if..else-Anweisung, die prüft ob der Integer-Wert größer, kleiner oder gleich null ist.
// Mit Ausgabe von Text auf der Konsole.
if (x > 0) print("positiv") else if (x < 0) print("negativ") else print("null")

// Int-Eingabe: 10 -> String-Ausgabe: positiv

When-Anweisung

Die when-Anweisung dient dem Pattern Matching. Nicht spezifizierte Fälle können mit „else“ abgefangen werden (vergleichbar mit „default“ bei switch-case-Anweisungen in Java).

//  Weist der schreibgeschützten lokalen Variable 'x' die Tastatureingabe (standard input stream) als Integer-Wert zu.
val x = readLine()!!.toInt()

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    3, 4 -> print("x == 3 oder x == 4")
    in 5..7 -> print("x zwischen 5 und 7")
    else -> print("x ist kleiner als 1 oder größer als 7.")
}

Repeat-Anweisung

// Wiederholt die Funktionsanweisung 2x
repeat(2) {
    println("Hello Wiki")
}
// Hello Wiki
// Hello Wiki

For-Schleife

// Iteriert i innerhalb der 7-downTo-1-Range in Zweierschritten
for (i in 7 downTo 1 step 2) print("$i ")
// 7 5 3 1

Higher-Order Functions

Kotlin unterstützt die Verwendung von Funktionen höherer Ordnung sowie von Closures mithilfe von Funktionszeigern, anonymen Funktionen und Lambda-Ausdrücken.

// Funktion, die eine andere Funktion entgegennimmt
fun callWithInt(number: Int, fn: (Int) -> Int) {
    val result = fn(number)
    println(result)
}

// Funktion, die eine andere Funktion zurückgibt
fun makeAdder(a: Int): (Int) -> Int {
    fun add(b: Int) = a + b
    return ::add
}

// Anders als in Java dürfen in Kotlin Closures auf Variablen auch schreibend zugreifen
var number = 0
fun makeCounter(): () -> Int {
    fun counter() = ++number
    return ::counter
}

fun double(x: Int) = x * 2

fun main() {
    // Aufruf mit Funktionszeiger
    callWithInt(42, ::double)

    // Aufruf mit anonymer Funktion
    callWithInt(42, fun(x: Int) = x * 2)

    // Aufruf mit Lambda-Ausdruck
    callWithInt(42, { x -> x * 2})

    // Als letztes Argument dürfen Lambdas außerhalb der runden Klammern geschrieben werden.
    // Wenn die Funktion nur ein Argument erwartet, heißt dieses "it", falls nicht anders festgelegt.
    callWithInt(42) { it * 2 }

    val add2 = makeAdder(2)
    println(add2(5)) // gibt 7 aus

    val counter = makeCounter()
    println(counter()) // Gibt 1 aus
    println(counter()) // Gibt 2 aus
}

Funktionen höherer Ordnung werden auch in der Standardbibliothek verwendet, insbesondere bei Collections-Datentypen wie Listen, Maps oder Sets.

val list = setOf(1, 2, 3, 4, 5)

println(list.map { it * 2 }) // [2, 4, 6, 8, 10]
println(list.filter { it > 2 }) // [3, 4, 5]
println(list.groupBy { it % 2 }) // {1=[1, 3, 5], 0=[2, 4]}

val cities = listOf("Berlin", "Hamburg", "München", "Köln", "Frankfurt")

// Die Anfangsbuchstaben der drei Städte mit den kürzesten Namen hintereinander
val result = cities
    .sortedBy { it.length }
    .take(3)
    .map { it[0] }
    .fold("") { acc, char -> acc + char }

println(result) // KBH

Null Safety

Die falsche Verwendung von Null-Pointern, die zu sogenannten „Null Pointer Exceptions“ führen können, ist in vielen Programmiersprachen eine häufige Fehlerursache. Daher stellt Kotlin eine Reihe von Features zu Verfügung, die das Auftreten solcher Null Pointer Exceptions bereits zur Kompilierzeit verhindern sollen. So muss der Entwickler zum Beispiel beim Deklarieren einer Variable explizit angeben, ob diese den Wert null annehmen darf oder nicht. Variablen, die null sein können, werden „nullable“ (etwa: nullbar) genannt.

// Erstellt eine Variable vom Typ "Int" (darf nicht "null" sein)
var a: Int = 123

// Erstellt eine Variable, die den Wert "null" annehmen darf.
var b: Int? = 456

// Nicht erlaubt (Erzeugt einen Kompilierfehler)
a = null

// Zugelassen
b = null

Wenn eine Variable, die null werden kann, verwendet wird, ohne sie vorher auf null geprüft zu haben, führt dies beim Kompilieren ebenfalls zu einem Fehler.

fun nullSafety() {
    val test: String? = "Test"

    // Kompilierfehler (könnte "Null Pointer Exception" verursachen)
    println(test.length)

    // Erlaubt, da auf null abgeprüft wird.
    if (test != null)
        println(test.length)

    // Auch erlaubt (zweite Bedingung wird nur überprüft, wenn die erste falsch ist)
    if (test == null || test.length == 0)
        println("Leerer String")

    // Ebenfalls erlaubt
    if (test == null)
        return

    println(test.length)
}

Kotlin bietet außerdem für einige typische Fälle besondere Syntax, um den benötigten Code zu verkürzen.

val ort = kunde?.adresse?.ort
val ortOderLeer = ort ?: ""

// Obiger Code ist gleichbedeutend mit:

val ort: String?
if (kunde == null || kunde.adresse == null)
    ort = null
else
    ort = kunde.adresse.ort

val ortOderLeer: String
if (ort == null)
    ortOderLeer = ""
else
    ortOderLeer = ort

Versionen

Version Datum Wichtige Änderungen
M1 12. April 2012 Erster Milestone Release. Erster eigenständig lauffähiger Compiler. Erste Version der Kotlin-Standardbibliothek.[24]
M2 11. Juni 2012 Einführung von Zugriffsmodifikatoren. Android Support wurde eingeführt.[25][26]
M3 20. September 2012 Mehrfachzuweisungen und Dataclasses wurden eingeführt. Erste Version von Kotlin Collections. Externe Annotationen und lokale Funktionen und Klassen werden ermöglicht.[27]
M4 11. Dezember 2012 JDK7-Kompatibilität wurde hinzugefügt. Deprecation Support über neue Annotation.[28]
M5 04. Februar 2013 Package Classes als Ersatz für Namespace-Klassen. Innere Klassen sind nun möglich. Default-Konstruktoren werden nun automatisch generiert.[29]
M6 12. August 2013 Annotationen können nur Argumente vom Typ Enum verwenden. Erste Version auf Maven Central. Android-Studio-Support.[30]
M7 20. März 2014 Inline Support für Lambda-Funktionen während der Kompilierzeit. toString(), equals() und hashCode() müssen nun explizit überschrieben werden. Throws Annotation für das Werfen von Exceptions wurde hinzugefügt. Streams werden nun unterstützt.[31]
M8 02. Juli 2014 Reflections erlauben nun auch den Zugriff auf Felder. transient, synchronized und strictfp keywords wurden hinzugefügt.[32]
M9 15. Oktober 2014 Inkrementelles Kompilieren des Quellcodes wird ermöglicht. Verbesserter Support für gemeinsamen Einsatz von Java und Kotlin unter anderem durch Plattformtypen.[33][34]
M10 17. Dezember 2014 Der reified-Parameter kann auch in Inline-Funktionen verwendet werden. Über die Java Native API können auch native Funktionen deklariert werden.[35]
M11 19. März 2015 Eine Klasse kann nun über mehrere Konstruktoren verfügen. Der Initialisierungsblock wird über das Keyword init markiert. Companion-Objekte können direkt über die Containerklasse angesprochen werden. Eigene Reflection API unabhängig von der JVM.[36]
M12 29. Mai 2015 Enums und Annotationen haben eine neue Syntax bekommen. Smart Casts wurden verbessert. Funktionstypen und erweiterte Funktionstypen können nun gegeneinander ausgetauscht werden.[37]
M13 16. September 2015 Über lateinit können nun auch Felder, die keine Null-Werte beinhalten dürfen, über Dependency Injection initialisiert werden. Sealed-Klassen ermöglichen Algebraischer Datentypen. Annotationen für Annotationen wurden eingeführt. Modifikatoren und Annotationen wurden syntaktisch getrennt. Erweiterung der Reflection API.[38]
M14 01. Oktober 2015 Annotationen können zur file-Klasse hinzugefügt werden. Reorganisation von Hilfsklassen in einzelne Klasse für jeden Datentyp.[39]
1.0 15. Februar 2016 Erster offizieller Release. Zukünftige Versionen sollen abwärtskompatibel bleiben. Hierzu werden in früheren Versionen als deprecated markierte Features als Error markiert.[40]
1.1 01. März 2017 Koroutinen erlauben eine einfache Programmierung von asynchronem Code. Offizieller Release für das Kotlin JavaScript Target, um Kotlin-Code direkt in JavaScript-Code zu kompilieren.[41]
1.2 28. November 2017 Einführung von Multiplattform-Projekten, um Code zwischen den verschiedenen Ebenen eines Projektes mehrfach zu verwenden. Effizientere Kompilierung.[42]
1.3 29. Oktober 2018 Beta zu Kotlin Native. Code kann direkt in native Binary-Dateien kompiliert werden.[43]
1.4 17. August 2020 Verbesserte Performance und Stabilität. Single-Abstract-Method-Konvertierung kann nun auch auf Kotlin-Code direkt angewendet werden.[44]
1.5 5. Mai 2021 Der JVM IR Compiler ist nun der Standardcompiler für Kotlin. Sealed Interfaces und Inline-Klassen wurden hinzugefügt.[45]
1.6 16. November 2021 Einführung von sealed-when-Ausdrücken. Neuer Kotlin-Native-Speichermanager.[46]
1.7 09. Juni 2022 Einführung des Kotlin K2 Compilers. Inkrementelle Kompilierung unterstützt nun auch nicht Kotlin-Komponenten in einem Gradle-Bau.[47]
1.8 28. Dezember 2022 Performance-Verbesserung für Reflection. Bessere Interoperabilität mit Objective-C/Swift[48]

Rezeption

  • Google hat Kotlin auf der Entwicklerkonferenz I/O 2019 zur bevorzugten Programmiersprache für Android erklärt.[49]
  • Meta Platforms nutzt nach eigenen Angaben in seiner Android-Codebase im Oktober 2022 mehr als 10 Millionen Zeilen Code, der in Kotlin geschrieben ist.[50]
  • In der Ausgabe Januar 2012 des Dr. Dobb’s Journal wurde die Programmiersprache zur Sprache des Monats (language of the month) erklärt.[51]

Der Kotlin-Website zufolge setzen kleine wie große Projekte die Sprache ein:

  • Pinterest nutzen monatlich 150 Millionen Anwender.
  • Gradle setzt Kotlin für Installationsskripte ein.
  • Evernote verwendet Kotlin für seinen Android-Client.
  • Uber nutzt Kotlin für interne Werkzeuge.
  • Corda, eine vollständig in Kotlin entwickelte Open-Source-Software, wird von mehreren Großbanken verwendet.[52]
  • Coursera entwickelt Android-Apps zum Teil mit Kotlin.
  • Atlassian verwendet Kotlin für das Werkzeug Trello unter Android.[53]

Literatur

  • Stephen Samuel, Stefan Bocutiu: Learn Kotlin Programming: A comprehensive guide to OOP, functions, concurrency, and coroutines in Kotlin 1.3, 2nd Edition. Packt Publishing, 2019, ISBN 978-1-78980-874-2 (google.com).
  • Irina Galata, Joe Howard: Kotlin Apprentice: Beginning Programming with Kotlin. 2018, ISBN 978-1-942878-50-6 (google.com).
  • Peter Sommerhoff: Kotlin for Android App Development. Addison-Wesley, 2019, ISBN 978-0-13-485419-9 (google.com).
  • Ted Hagos: Learn Android Studio 3 with Kotlin: Efficient Android App Development. Apress, 2018, ISBN 978-1-4842-3907-0 (google.com).
  • Karl Szwillus: Kotlin, Einstieg und Praxis. mitp, 2019, ISBN 978-3-95845-853-6 (google.com).

Einzelnachweise

  1. Release Kotlin 1.9.22.
  2. Introduction to Kotlin Programming. In: O’Reilly Media, Inc. Archiviert vom Original am 7. Dezember 2017; abgerufen am 21. Juni 2017.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/player.oreilly.com
  3. kotlin/license/README.md. In: JetBrains/kotlin. GitHub, abgerufen am 20. September 2017.
  4. Supported platforms – Kotlin Multiplatform Mobile Docs. In: Kotlin Multiplatform Mobile Docs Help. 18. August 2021, abgerufen am 31. August 2021 (englisch).
  5. heise online: Google I/O: Googles Bekenntnis zu Kotlin. Abgerufen am 18. Juni 2019.
  6. Maxim Shafirov: Kotlin on Android. Now official. In: Kotlin Blog. 17. Mai 2017, abgerufen am 18. Juni 2019 (amerikanisches Englisch).
  7. Sandra Upson: The Language that Stole Android Developers’ Hearts. WIRED, 19. Mai 2017, abgerufen am 23. Februar 2018 (englisch).
  8. FAQ – Kotlin Programming Language. Abgerufen am 21. Februar 2018 (englisch).
  9. Janice Heiss: The Advent of Kotlin: A Conversation with JetBrains' Andrey Breslav. In: oracle.com. Oracle Technology Network, April 2013, abgerufen am 2. Februar 2014.
  10. Hello World
  11. Paul Krill: JetBrains readies JVM language Kotlin. In: infoworld.com. InfoWorld, 22. Juli 2011, abgerufen am 2. Februar 2014.
  12. John Waters: Kotlin Goes Open Source. In: ADTmag.com/. 1105 Enterprise Computing Group, 22. Februar 2012, abgerufen am 2. Februar 2014.
  13. Andrey Breslav: Kotlin 1.0 Released: Pragmatic Language for JVM and Android. 15. Februar 2016;.
  14. What’s New in IntelliJ IDEA. In: JetBrains.
  15. Kotlin – Plugins.
  16. Getting Started with Eclipse Neon – Kotlin Programming Language. In: Kotlin.
  17. Kotlin for Eclipse.
  18. Kotlin - Visual Studio Marketplace. 9. Juni 2018, abgerufen am 31. August 2021 (englisch).
  19. Kotlin Build Tools.
  20. Rainald Menge-Sonnentag: Entwicklungsumgebung Android Studio 3.0 spricht Kotlin. heise.de, 26. Oktober 2017, abgerufen am 27. Oktober 2017.
  21. Kai Schmidt und Markus Schwarz: Testen mit Kotlin. informatik-aktuell.de, 17. Dezember 2019, abgerufen am 27. Dezember 2019.
  22. Semicolons. In: jetbrains.com. Abgerufen am 8. Februar 2014.
  23. functions. In: jetbrains.com. Abgerufen am 8. Februar 2014.
  24. Andrey Breslav: Kotlin M1 is Out! In: The Kotlin Blog. JetBrains, 12. April 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  25. Andrey Breslav: Kotlin M2 Candidate. In: The Kotlin Blog. JetBrains, 4. Juni 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  26. Andrey Breslav: Kotlin M2 is Out! In: The Kotlin Blog. JetBrains, 11. Juni 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  27. Andrey Breslav: Kotlin M3 is Out! In: The Kotlin Blog. JetBrains, 20. September 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  28. Andrey Breslav: Kotlin M4 is Out! In: The Kotlin Blog. JetBrains, 11. Dezember 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  29. Andrey Breslav: Kotlin M5 is Out! In: The Kotlin Blog. JetBrains, 4. Februar 2013, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  30. Kotlin M6 is here! In: The Kotlin Blog. JetBrains, 12. August 2013, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  31. M7 Release Available. In: The Kotlin Blog. JetBrains, 20. März 2014, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  32. M8 is out! In: The Kotlin Blog. JetBrains, 2. Juli 2014, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  33. M9 is coming. In: The Kotlin Blog. JetBrains, 1. Oktober 2012, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  34. M9 is here! In: The Kotlin Blog. JetBrains, 15. Oktober 2014, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  35. M10 is out. In: The Kotlin Blog. JetBrains, 17. Dezember 2014, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  36. Kotlin M11 is Out! In: The Kotlin Blog. JetBrains, 19. März 2015, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  37. Kotlin M12 is out! In: The Kotlin Blog. JetBrains, 29. Mai 2015, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  38. Kotlin M13 is out! In: The Kotlin Blog. JetBrains, 16. September 2015, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  39. Andrey Breslav: Kotlin M14 is out! In: The Kotlin Blog. JetBrains, 1. Oktober 2015, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  40. Andrey Breslav: Kotlin 1.0 Released: Pragmatic Language for the JVM and Android. In: The Kotlin Blog. JetBrains, 15. Februar 2016, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  41. Roman Belov: Kotlin 1.1 Released With JavaScript Support, Coroutines, and More. In: The Kotlin Blog. JetBrains, 1. März 2017, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  42. Dmitry Jemerov: Kotlin 1.2 Released: Sharing Code between Platforms. In: The Kotlin Blog. JetBrains, 28. November 2017, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  43. Roman Belov: Kotlin 1.3 Released with Coroutines, Kotlin/Native Beta, and more. In: The Kotlin Blog. JetBrains, 29. Oktober 2018, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  44. Svetlana Isakova: Kotlin 1.4 Released with a Focus on Quality and Performance. In: The Kotlin Blog. JetBrains, 17. August 2020, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  45. Ekaterina Volodko: Kotlin 1.5.0 – the First Big Release of 2021. In: The Kotlin Blog. JetBrains, 5. Mai 2021, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  46. Alina Grebenkina: Kotlin 1.6.0 Released. In: The Kotlin Blog. JetBrains, 16. November 2021, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  47. Andrey Polyakov: Kotlin 1.7.0 Released. In: The Kotlin Blog. JetBrains, 9. Juni 2022, abgerufen am 17. Dezember 2022 (amerikanisches Englisch).
  48. Andrey Polyakov: Kotlin 1.8.0 Released. In: The Kotlin Blog. JetBrains, 12. Januar 2023, abgerufen am 14. Januar 2023 (amerikanisches Englisch).
  49. Jörn Brien: Kotlin: Google macht Java-Alternative zur Nummer eins bei der Android-App-Entwicklung. In: t3n Magazin. 9. Mai 2019, abgerufen am 30. August 2021.
  50. Chris Wiltz: From zero to 10 million lines of Kotlin. In: engineering.fb.com. 24. Oktober 2022, abgerufen am 26. Oktober 2022 (englisch).
  51. Andrey Breslav: Language of the Month: Kotlin. In: drdobbs.com. 20. Januar 2012, abgerufen am 2. Februar 2014.
  52. Corda.
  53. Project Kotlin.: „Kotlin in backend, data processing and service development“
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.