Kotlin (bahasa pemrograman)

Bahasa pemrograman yang dapat berjalan di JVM
(Dialihkan dari Kotlin)


Kotlin adalah sebuah bahasa pemrograman dengan pengetikan statis yang berjalan pada Mesin Virtual Java ataupun menggunakan kompiler LLVM yang dapat pula dikompilasikan kedalam bentuk kode sumber JavaScript. Pengembang utamanya berasal dari tim programer dari JetBrains yang bermarkas di Rusia.[3] Meskipun sintaksisnya tidak kompatibel dengan bahasa Java, Kotlin didesain untuk dapat bekerja sama dengan kode bahasa Java dan bergantung kepada kode bahasa Java dari Kelas Pustaka Java yang ada, seperti berbagai framework Java yang ada. Tim Pengembang memutuskan menamakannya Kotlin dengan mengambil nama dari sebuah pulau di Rusia, sebagaimana Java yang mengambil nama dari pulau Jawa di Indonesia.[4] Setelah Google mengumumkan bahwa Kotlin menjadi bahasa kelas satu bagi Android, maka bersama Java dan C++, Kotlin menjadi bahasa resmi untuk pengembangan aplikasi-aplikasi Android.[5]

Kotlin
ParadigmaMulti-paradigma: berorientasi objek, fungsional, imperatif, terstruktur blok, deklaratif, generik, reflektif, bersamaan
Dirancang olehJetBrains
PengembangJetBrains dan kontributor sistem terbuka
Rilis perdana22 Juli 2011; 13 tahun lalu (2011-07-22)
Rilis stabil
2.0.20[1] Sunting di Wikidata / 2 Februari 2023; 22 bulan lalu (2023-02-02)[2]
Tipe sistemDisimpulkan, statis, kuat
Platform
Sistem operasiYang mendukung JVM atau interpreter JavaScript, Lintas platform
LisensiLisensi Apache 2.0
Ekstensi nama berkas.kt, .kts
Situs webkotlinlang.org
Repositorikotlinlang.org
Terpengaruh oleh
Sunting kotak info
Sunting kotak info • L • B
Info templat
Bantuan penggunaan templat ini

Riwayat

sunting
 
Gambar 2D maskot Kotlin
 
Gambar 3D maskot Kotlin

Pada Juli 2011, JetBrains meluncurkan Project Kotlin, bahasa baru untuk JVM, yang telah dikembangkan selama satu tahun.[6] Pimpinan JetBrains Dmitry Jemerov mengatakan bahwa sebagian besar bahasa tidak memiliki fitur yang mereka cari, kecuali Scala . Namun, ia menyebut waktu kompilasi Scala yang lambat sebagai kekurangan.[6] Salah satu tujuan yang dinyatakan dari Kotlin adalah untuk mengkompilasi secepat Java. Pada bulan Februari 2012, JetBrains membuat proyek open source di bawah lisensi Apache 2.[7]

Nama itu berasal dari Pulau Kotlin, dekat St. Petersburg. Andrey Breslav menyebutkan bahwa tim memutuskan untuk menamainya setelah sebuah pulau, seperti halnya Java dinamai menurut pulau Jawa di Indonesia [8] (meskipun bahasa pemrograman Java diartikan dengan nama kopi daripada pulau).[9] JetBrains berharap bahasa baru ini akan mendorong penjualan IntelliJ IDEA .[10]

Kotlin versi 1.0 dirilis pada 15 Februari 2016 [11] Versi ini secara resmi ditetapkan sebagai versi rilis stabil pertama dan JetBrains telah menetapkan dukungan versi sebelumnya untuk jangka panjangan dengan versi ini.

Pada Google I/O 2017, Google mengumumkan dukungan kelas pertama untuk Kotlin pada Android.

Kotlin versi 1.2 dirilis pada 28 November 2017.[12] Fitur berbagi kode antara JVM dan platform Javascript baru ditambahkan pada versi rilis ini.

Kotlin versi 1.3 dirilis pada 29 Oktober 2018, membawa coroutines pada pemrograman asynchronous.

Pada 7 Mei 2019, Google mengumumkan bahwa bahasa pemrograman Kotlin sekarang menjadi bahasa pilihan untuk pengembang aplikasi Android.[13]

Kotlin 1.4 dirilis pada Agustus 2020, misalnya dengan beberapa perubahan kecil pada dukungan untuk platform Apple, yaitu pada interop Objective-C/Swift.[14][15]

Kotlin 1.5 dirilis pada Mei 2021.[14]

Kotlin 1.6 dirilis pada November 2021.[14]

Kotlin 1.7 dirilis pada Juni 2022.[14]

Kotlin 1.8 dirilis pada Desember 2022, 1.8.0 dirilis pada 11 Januari 2023.[16]

Desain

sunting

Pemimpin pengembangan Andrey Breslav mengatakan bahwa Kotlin dirancang untuk menjadi bahasa berorientasi objek berkekuatan industri, dan "bahasa yang lebih baik" daripada Java, tetapi masih sepenuhnya dapat dioperasikan dengan kode Java, memungkinkan perusahaan untuk melakukan migrasi bertahap dari Java ke Kotlin.[17]

Titik koma adalah opsional sebagai terminator pernyataan; dalam kebanyakan kasus, baris baru sudah cukup bagi kompiler untuk menyimpulkan bahwa pernyataan telah berakhir.[18]

Deklarasi variabel dan daftar parameter Kotlin memiliki tipe data yang muncul setelah nama variabel (dan dengan pemisah titik dua ), mirip dengan Ada, BASIC, Pascal, TypeScript dan Rust . Ini, menurut sebuah artikel dari Roman Elizarov, pemimpin proyek saat ini, menghasilkan penyelarasan nama variabel dan lebih menyenangkan untuk dilihat terutama ketika ada beberapa deklarasi variabel berturut-turut dan satu atau lebih tipe terlalu rumit untuk inferensi tipe atau perlu dideklarasikan secara eksplisit agar dapat dipahami oleh pembaca manusia.[19][20]

Variabel di Kotlin dapat dibaca-saja, dideklarasikan dengan val kata kunci, atau bisa berubah, dideklarasikan denganvarkata kunci.[21]

Anggota kelas bersifat publik secara default, dan kelas itu sendiri adalah final secara default, artinya membuat kelas turunan dinonaktifkan kecuali kelas dasar dideklarasikan dengan open kata kunci.

Selain kelas dan fungsi anggota (yang setara dengan metode) pemrograman berorientasi objek, Kotlin juga mendukung pemrograman prosedural dengan penggunaan fungsi.[22] Fungsi dan konstruktor Kotlin mendukung argumen default, daftar argumen panjang variabel, argumen bernama, dan kelebihan beban dengan tanda tangan unik. Fungsi anggota kelas adalah virtual, yaitu dikirim berdasarkan jenis runtime dari objek yang dipanggil.

Kotlin 1.3 menambahkan dukungan untuk kontrak,[23] yang stabil untuk deklarasi pustaka standar, tetapi masih eksperimental untuk deklarasi yang ditentukan pengguna. Kontrak terinspirasi oleh desain Eiffel dengan paradigma pemrograman kontrak.[24]

Menurut pengembang Kotlin, Anda dapat memanggil kode JavaScript dari Kotlin, misalnya menulis aplikasi React yang aman untuk jenis tertentu, atau menulis dan memelihara aplikasi web tumpukan penuh yang berbagi logika validasi dengan frontend, atau Anda dapat "menghasilkan pustaka dari kode Kotlin Anda yang dapat dikonsumsi sebagai modul dari basis kode apa pun yang ditulis dalam JavaScript atau TypeScript".[25]

Sintaks

sunting

Gaya pemrograman prosedural

sunting

Kotlin melonggarkan batasan Java yang mengizinkan metode dan variabel statis hanya ada di dalam badan kelas. Objek dan fungsi statis dapat didefinisikan di tingkat atas paket tanpa memerlukan tingkat kelas yang berlebihan. Untuk kompatibilitas dengan Java, Kotlin menyediakan anotasi JvmName yang menentukan nama kelas yang digunakan saat paket dilihat dari proyek Java. Misalnya, @file:JvmName("JavaClassName").

Titik masuk utama

sunting

Seperti pada C, C++, C#, Java, dan Go, titik masuk ke program Kotlin adalah fungsi bernama "main", yang dapat dilewatkan array yang berisi argumen baris perintah apa pun. Ini opsional karena Kotlin 1.3.[26] Perl, PHP dan interpolasi string gaya shell Unix didukung. Jenis inferensi juga didukung.

// Hello, World! example
fun main() {
    val scope = "World"
    println("Hello, $scope!")
}

fun main(args: Array<String>) {
    for (arg in args)
        println(arg)
}

Fungsi ekstensi

sunting

Mirip dengan C#, Kotlin memungkinkan penambahan fungsi ekstensi ke kelas mana pun tanpa formalitas membuat kelas turunan dengan fungsi baru. Fungsi ekstensi memiliki akses ke semua antarmuka publik kelas, yang dapat digunakan untuk membuat antarmuka fungsi baru ke kelas target. Fungsi ekstensi akan muncul persis seperti fungsi kelas dan akan ditampilkan dalam pemeriksaan penyelesaian kode fungsi kelas. Sebagai contoh:

package MyStringExtensions

fun String.lastChar(): Char = get(length - 1)

>>> println("Kotlin".lastChar())

Dengan menempatkan kode sebelumnya di tingkat atas sebuah paket, kelas String diperluas untuk menyertakan fungsi lastChar yang tidak termasuk dalam definisi asli kelas String.

// Overloading '+' operator using an extension function
operator fun Point.plus(other: Point): Point {
    return Point(x + other.x, y + other.y)
}

>>> val p1 = Point(10, 20)
>>> val p2 = Point(30, 40)
>>> println(p1 + p2)
Point(x=40, y=60)

Argumen Unpack dengan operator spread

sunting

Sama halnya dengan sintaks program Python, operator spread asterisk (*) membongkar (unpack) konten array sebagai argumen yang dipisahkan koma ke suatu fungsi:

fun main(args: Array<String>) { 
    val list = listOf("args: ", *args)
    println(list)
}

Deklarasi destructuring

sunting

Deklarasi destructuring menguraikan objek menjadi beberapa variabel sekaligus, misalnya objek koordinat 2D mungkin didestruktur menjadi dua bilangan bulat, x dan y.

Misalnya, Map.Entry. Objek Entry mendukung destrukturisasi untuk menyederhanakan akses ke bidang kunci dan nilainya:

for ((key, value) in map)
    println("$key: $value")

Fungsi bersarang (Nested)

sunting

Kotlin memungkinkan fungsi lokal dideklarasikan di dalam fungsi atau metode lain.

class User(val id: Int, val name: String, val address: String)
    
fun saveUserToDb(user: User) {
    fun validate(user: User, value: String, fieldName: String) {
        require(value.isNotEmpty()) { "Can't save user ${user.id}: empty $fieldName" }
    }
    
    validate(user, user.name, "Name") 
    validate(user, user.address, "Address")
    // Save user to the database 
    ...
}

Kelas bersifat final secara bawaan

sunting

Di Kotlin, untuk mendapatkan kelas baru dari tipe kelas dasar, kelas dasar harus secara eksplisit ditandai sebagai "terbuka". Ini berbeda dengan kebanyakan bahasa berorientasi objek seperti Java di mana kelas terbuka secara bawaan.

Contoh kelas dasar yang terbuka untuk menurunkan subkelas baru darinya.

// open on the class means this class will allow derived classes
open class MegaButton  {

    // no-open on a function means that 
    //    polymorphic behavior disabled if function overridden in derived class
    fun disable() { ... }

    // open on a function means that
    //    polymorphic behavior allowed if function is overridden in derived class
    open fun animate() { ... }
}

class GigaButton: MegaButton() {

    // Explicit use of override keyword required to override a function in derived class
    override fun animate() { println("Giga Click!") } 
}

Kelas abstrak terbuka secara bawaan

sunting

Kelas abstrak mendefinisikan fungsi placeholder abstrak atau "virtual murni" yang akan didefinisikan dalam kelas turunan. Kelas abstrak terbuka secara bawaan.

// No need for the open keyword here, it’s already open by default
abstract class Animated {

    // This virtual function is already open by default as well
    abstract fun animate()
  
    open fun stopAnimating() { }

    fun animateTwice() { }
}

Kelas bersifat publik secara bawaan

sunting

Kotlin menyediakan kata kunci berikut untuk membatasi visibilitas deklarasi tingkat atas, seperti kelas, dan untuk anggota kelas: public, internal, protected, dan private.

Penerapan kedalam anggota kelas:

Kata kunci Visibilitas
public (bawaan) Di mana pun
internal Dalam modul
protected Di dalam subkelas
private Dalam satu kelas

Ketika diterapkan ke deklarasi tingkat atas:

Kata kunci Visibilitas
public (bawaan) Di mana pun
internal Dalam modul
private Dalam sebuah file

Contoh:

// Class is visible only to current module
internal open class TalkativeButton{
    // method is only visible to current class 
    private fun yell() = println("Hey!")
    // method is visible to current class and derived classes
    protected fun whisper() = println("Let's talk!")
}
internal class MyTalkativeButton: TalkativeButton() {
    fun utter() = super.whisper()
}
MyTalkativeButton().utter()

Konstruktor utama vs. konstruktor sekunder

sunting

Kotlin mendukung spesifikasi "konstruktor utama" sebagai bagian dari definisi kelas itu sendiri, yang terdiri dari daftar argumen yang mengikuti nama kelas. Daftar argumen ini mendukung sintaks yang diperluas pada daftar argumen fungsi standar Kotlin, yang memungkinkan deklarasi properti kelas di konstruktor utama, termasuk atribut visibilitas, ekstensibilitas, dan mutabilitas. Selain itu, saat mendefinisikan subkelas, properti di antarmuka super dan kelas super dapat diganti di konstruktor utama.

// Example of class using primary constructor syntax
// (Only one constructor required for this class)
open class BaseUser(open var isSubscribed: Boolean)
open class PowerUser(protected val nickname: String, final override var isSubscribed: Boolean = true):BaseUser(isSubscribed) { }

Namun, dalam kasus di mana lebih dari satu konstruktor diperlukan untuk sebuah kelas, konstruktor yang lebih umum dapat digunakan disebut sintaks konstruktor sekunder yang sangat mirip dengan sintaks konstruktor yang digunakan di sebagian besar bahasa berorientasi objek seperti C++, C#, dan Java.

// Example of class using secondary constructor syntax
// (more than one constructor required for this class)
class Context
class AttributeSet
open class View(ctx:Context) {
    constructor(ctx: Context, attr: AttributeSet): this(ctx)
}
class MyButton : View {
    // Constructor #1 
    constructor(ctx: Context) : super(ctx) { 
    } 
    // Constructor #2
    constructor(ctx: Context, attr: AttributeSet) : super(ctx, attr) {
        // ... 
    }
}

Kelas tertutup

sunting

Kelas dan antarmuka yang disegel membatasi hierarki subkelas, yang berarti lebih banyak kontrol atas hierarki pewarisan.

Deklarasi antarmuka dan kelas yang disegel:

sealed interface Expr
sealed class Job

Semua subclass dari kelas yang disegel didefinisikan pada waktu kompilasi. Tidak ada subkelas baru yang dapat ditambahkan ke dalamnya setelah kompilasi modul yang memiliki kelas tersegel. Misalnya, kelas yang disegel dalam file jar yang dikompilasi tidak dapat disubklasifikasikan.

sealed class Vehicle
data class Car(val brandName: String, val owner: String, val color: String): Vehicle()
class Bike(val brandName: String, val owner: String, val color: String): Vehicle()
class Tractor(val brandName: String, val owner: String, val color: String): Vehicle()
val kiaCar = Car("KIA", "John", "Blue")
val hyundaiCar = Car("Hyundai", "Britto", "Green")

Kelas data

sunting

Konstruksi data class Kotlin mendefinisikan kelas yang tujuan utamanya adalah menyimpan data. Konstruksi ini mirip dengan kelas normal kecuali bahwa fungsi kunci equals, toString, dan kode hashCode secara otomatis dihasilkan dari properti kelas. Di Jawa, kelas seperti itu diharapkan menyediakan berbagai macam fungsi standar seperti itu. Kelas data tidak diharuskan untuk mendeklarasikan metode apa pun, meskipun masing-masing harus memiliki setidaknya satu properti. Kelas data sering ditulis tanpa badan, meskipun dimungkinkan untuk memberikan kelas data metode apa pun atau konstruktor sekunder yang valid untuk kelas lain mana pun. Kata kunci data digunakan sebelum kata kunci class untuk mendefinisikan kelas data.[27]

// data class with parameters and their optional default values
data class Book(val name: String = "", val price: Int = 0)
fun main(args: Array<String>) {
    // create a data class object like any other class object
    var book1 = Book("Kotlin Programming", 250)
    println(book1)
    // output: Book(name=Kotlin Programming, price=250)
}

Shell interaktif Kotlin

sunting
$ kotlinc-jvm
type :help for help; :quit for quit
>>> 2 + 2
4
>>> println("Hello, World!")
Hello, World!

Kotlin sebagai bahasa skrip

sunting

Kotlin juga dapat digunakan sebagai bahasa scripting. Skrip adalah file sumber Kotlin (.kts) dengan kode yang dapat dieksekusi tingkat atas.

// list_folders.kts
import java.io.File
val folders = File(args[0]).listFiles { file -> file.isDirectory() }
folders?.forEach(::println)

Skrip dapat dijalankan dengan meneruskan opsi -script dan file skrip yang sesuai ke kompiler.

$ kotlinc -script list_folders.kts "path_to_folder_to_inspect"

Keamanan kosong

sunting

Kotlin membedakan antara tipe data nullable dan non-nullable. Semua objek nullable harus dideklarasikan dengan tanda "?" postfix setelah nama tipe. Operasi pada objek yang dapat dibatalkan memerlukan perhatian khusus dari pengembang: pemeriksaan nol harus dilakukan sebelum menggunakan nilai. Kotlin menyediakan operator null-safe untuk membantu developer.

fun sayHello(maybe: String?, neverNull: Int) {
    // use of elvis operator
    val name: String = maybe ?: "stranger"
    println("Hello $name")
}

Contoh penggunaan operator navigasi aman:

// returns null if...
// - foo() returns null,
// - or if foo() is non-null, but bar() returns null,
// - or if foo() and bar() are non-null, but baz() returns null.
// vice versa, return value is non-null if and only if foo(), bar() and baz() are non-null
foo()?.bar()?.baz()

Lambda

sunting

Kotlin menyediakan dukungan untuk fungsi tingkat tinggi dan fungsi anonim atau lambda.[28]

// the following function takes a lambda, f, and executes f passing it the string "lambda"
// note that (String) -> Unit indicates a lambda with a String parameter and Unit return type
fun executeLambda(f: (String) -> Unit) {
    f("lambda")
}

Lambdas dideklarasikan menggunakan kurung kurawal,{ } . Jika lambda mengambil parameter, mereka dideklarasikan dalam kurung kurawal dan diikuti oleh-> operator.

// the following statement defines a lambda that takes a single parameter and passes it to the println function
val l = { c : Any? -> println(c) }
// lambdas with no parameters may simply be defined using { }
val l2 = { print("no parameters") }

Contoh kompleks "hello world"

sunting
fun main(args: Array<String>) {
    greet {
        to.place
    }.print()
}

// Inline higher-order functions
inline fun greet(s: () -> String) : String = greeting andAnother s()

// Infix functions, extensions, type inference, nullable types, 
// lambda expressions, labeled this, Elvis operator (?:)
infix fun String.andAnother(other : Any?) = buildString() 
{ 
    append(this@andAnother); append(" "); append(other ?: "") 
}

// Immutable types, delegated properties, lazy initialization, string templates
val greeting by lazy { val doubleEl: String = "ll"; "he${doubleEl}o" }

// Sealed classes, companion objects
sealed class to { companion object { val place = "world"} }

// Extensions, Unit
fun String.print() = println(this)

Peralatan

sunting
  • IntelliJ IDEA memiliki dukungan plug-in untuk Kotlin.[29] IntelliJ IDEA 15 adalah versi pertama yang menggabungkan plugin Kotlin di IntelliJ Installer, dan memberikan dukungan Kotlin secara langsung.[30]
  • JetBrains juga menyediakan plugin untuk Eclipse .[31][32]
  • Integrasi dengan alat build Java umum didukung termasuk Apache Maven,[33] Apache Ant,[34] dan Gradle .[35]
  • Android Studio (berdasarkan IntelliJ IDEA) memiliki dukungan resmi untuk Kotlin, mulai dari Android Studio 3.[36]
  • Emacs memiliki Mode Kotlin di repositori paket Melpa-nya.
  • Vim memiliki plugin yang dikelola di GitHub.[37]
  • Json2Kotlin menghasilkan kode Kotlin asli gaya POJO untuk pemetaan respons layanan web.

Aplikasi

sunting

Saat Kotlin diumumkan sebagai bahasa pengembangan Android resmi di Google I/O pada Mei 2017, Kotlin menjadi bahasa ketiga yang didukung penuh untuk Android, selain Java dan C++.[38] Pada tahun 2020, Kotlin masih paling banyak digunakan di Android, dengan Google memperkirakan bahwa 70% dari 1000 aplikasi teratas di Play Store ditulis dalam Kotlin. Google sendiri memiliki 60 aplikasi yang ditulis dalam Kotlin, termasuk Maps dan Drive. Banyak aplikasi Android, seperti Google's Home, sedang dalam proses migrasi ke Kotlin, jadi gunakan Kotlin dan Java. Kotlin di Android dipandang bermanfaat karena keamanan penunjuk nolnya serta fitur-fiturnya yang membuat kode lebih pendek dan lebih mudah dibaca.[39]

Selain penggunaannya yang menonjol di Android, Kotlin mendapatkan daya tarik dalam pengembangan sisi server. Spring Framework secara resmi menambahkan dukungan Kotlin dengan versi 5 pada 4 Januari 2017.[40] Untuk lebih mendukung Kotlin, Spring telah menerjemahkan semua dokumentasinya ke Kotlin dan menambahkan dukungan bawaan untuk banyak fitur khusus Kotlin seperti coroutine.[41] Selain Spring, JetBrains telah menghasilkan kerangka kerja pertama Kotlin yang disebut Ktor untuk membangun aplikasi web.[42]

Pada tahun 2020, JetBrains menemukan dalam survei pengembang yang menggunakan Kotlin bahwa 56% menggunakan Kotlin untuk aplikasi seluler, sementara 47% menggunakannya untuk back-end web. Lebih dari sepertiga pengembang Kotlin mengatakan bahwa mereka bermigrasi ke Kotlin dari bahasa lain. Sebagian besar pengguna Kotlin menargetkan Android (atau sebaliknya di JVM), dengan hanya 6% yang menggunakan Kotlin Native.[43]

Adopsi

sunting

Pada tahun 2018, Kotlin adalah bahasa dengan pertumbuhan tercepat di GitHub dengan 2,6 kali lebih banyak pengembang dibandingkan tahun 2017.[44] Ini adalah bahasa pemrograman keempat yang paling dicintai menurut Survei Pengembang Stack Overflow 2020.[45]

Kotlin juga dianugerahi O'Reilly Open Source Software Conference Breakout Award untuk 2019.[46]

Banyak perusahaan/organisasi telah menggunakan Kotlin untuk pengembangan backend:

Beberapa perusahaan/organisasi telah menggunakan Kotlin untuk pengembangan web:

Sejumlah perusahaan secara terbuka menyatakan bahwa mereka menggunakan Kotlin:

Pranala luar

sunting

Rujukan

sunting
  1. ^ "Release Kotlin 2.0.20 (Repository)". 
  2. ^ Alina Grebenkina (2021-02-04). "1.4.30 Is Released With a New JVM Backend and Language and Multiplatform Features". The Kotlin Blog. Diakses tanggal 2021-03-15. 
  3. ^ Heiss, Janice (April 2013). "The Advent of Kotlin: A Conversation with JetBrains' Andrey Breslav". oracle.com. Oracle Technology Network. Diakses tanggal February 2, 2014. 
  4. ^ Mobius (2015-01-08), Андрей Бреслав — Kotlin для Android: коротко и ясно, diakses tanggal 2017-05-28 
  5. ^ "Kotlin dan Android". Android Developers. Diakses tanggal 2019-03-22. 
  6. ^ a b Krill, Paul (22 July 2011). "JetBrains readies JVM language Kotlin". InfoWorld. Diarsipkan dari versi asli tanggal 7 September 2019. Diakses tanggal 2 February 2014. 
  7. ^ Waters, John (22 February 2012). "Kotlin Goes Open Source". ADTmag.com. 1105 Enterprise Computing Group. Diarsipkan dari versi asli tanggal 18 February 2014. Diakses tanggal 2 February 2014. 
  8. ^ Mobius (8 January 2015), Андрей Бреслав — Kotlin для Android: коротко и ясно, diakses tanggal 28 May 2017 
  9. ^ Kieron Murphy (4 October 1996). "So why did they decide to call it Java?". JavaWorld. Diarsipkan dari versi asli tanggal 15 March 2019. Diakses tanggal 14 October 2017. 
  10. ^ "Why JetBrains needs Kotlin". we expect Kotlin to drive the sales of IntelliJ IDEA 
  11. ^ "Kotlin 1.0 Released: Pragmatic Language for JVM and Android | Kotlin Blog". Blog.jetbrains.com. 2016-02-15. Diakses tanggal 2017-04-11. 
  12. ^ "Kotlin 1.2 Released: Sharing Code between Platforms | Kotlin Blog". Blog.jetbrains.com. 2017-11-28. 
  13. ^ "Kotlin is now Google's preferred language for Android app development". TechCrunch (dalam bahasa Inggris). Diakses tanggal 8 May 2019. 
  14. ^ a b c d "Kotlin releases". kotlinlang.org. 10 Juni 2022. Diakses tanggal 19 Juni 2022. 
  15. ^ "What's New in Kotlin 1.4 - Kotlin Programming Language". Kotlin (dalam bahasa Inggris). Diakses tanggal 2020-08-20. In 1.4.0, we slightly change the Swift API generated from Kotlin with respect to the way exceptions are translated. 
  16. ^ Krill, Paul (2023-01-12). "Kotlin 1.8.0 adds recursive copy, delete for directories". InfoWorld (dalam bahasa Inggris). Diakses tanggal 2023-05-08. 
  17. ^ "JVM Languages Report extended interview with Kotlin creator Andrey Breslav". Zeroturnaround.com. 22 April 2013. Diakses tanggal 2 February 2014. 
  18. ^ "Semicolons". jetbrains.com. Diakses tanggal 8 February 2014. 
  19. ^ "Types are moving to the right". Medium. Medium. 16 July 2020. Diakses tanggal 6 November 2021. 
  20. ^ "Roman Elizarov is the new Project Lead for Kotlin". The Kotlin Blog. JetBrains. Diakses tanggal 7 November 2021. 
  21. ^ "Basic Syntax". Kotlin. Jetbrains. Diakses tanggal 19 January 2018. 
  22. ^ "functions". jetbrains.com. Diakses tanggal 8 February 2014. 
  23. ^ "What's New in Kotlin 1.3 - Kotlin Programming Language". Kotlin. Diakses tanggal 4 April 2020. 
  24. ^ "Design by Contract (DbC) design considerations". Kotlin Discussions (dalam bahasa Inggris). 16 August 2012. Diakses tanggal 4 April 2020. Implement the full semantics of Eiffel DbC and improve upon it. 
  25. ^ "Kotlin for JavaScript | Kotlin". Kotlin Help (dalam bahasa Inggris). 21 January 2021. Diakses tanggal 2021-03-19. 
  26. ^ "Kotlin Examples: Learn Kotlin Programming By Example". Diarsipkan dari versi asli tanggal 2021-11-18. Diakses tanggal 2022-06-19. 
  27. ^ "Introduction to Data Classes in Kotlin". 
  28. ^ "Higher-Order Functions and Lambdas". Kotlin. Jetbrains. Diakses tanggal 19 January 2018. 
  29. ^ "Kotlin :: JetBrains Plugin Repository". Plugins.jetbrains.com. 31 March 2017. Diakses tanggal 11 April 2017. 
  30. ^ "What's New in IntelliJ IDEA 2017.1". Jetbrains.com. Diakses tanggal 11 April 2017. 
  31. ^ "Getting Started with Eclipse Neon – Kotlin Programming Language". Kotlinlang.org. 10 November 2016. Diakses tanggal 11 April 2017. 
  32. ^ "JetBrains/kotlin-eclipse: Kotlin Plugin for Eclipse". GitHub. Diakses tanggal 11 April 2017. 
  33. ^ "Using Maven – Kotlin Programming Language". kotlinlang.org. Diakses tanggal 9 May 2017. 
  34. ^ "Using Ant – Kotlin Programming Language". kotlinlang.org. Diakses tanggal 9 May 2017. 
  35. ^ "Using Gradle – Kotlin Programming Language". kotlinlang.org. Diakses tanggal 9 May 2017. 
  36. ^ "Kotlin and Android". Android Developers. 
  37. ^ "udalov/kotlin-vim: Kotlin plugin for Vim. Featuring: syntax highlighting, basic indentation, Syntastic support". GitHub. Diakses tanggal 30 August 2019. 
  38. ^ Lardinois, Frederic (17 May 2017). "Google makes Kotlin a first-class language for writing Android apps". techcrunch.com (dalam bahasa Inggris). Diakses tanggal 28 June 2018. 
  39. ^ "Kotlin programming language: How Google is using it to squash the code bugs that cause most crashes". ZDNet. 
  40. ^ "Introducing Kotlin support in Spring Framework 5.0". Spring. Pivotal. 4 January 2017. Diakses tanggal 29 September 2020. 
  41. ^ "The State of Kotlin Support in Spring". JetBrains (dalam bahasa Inggris). Diakses tanggal 6 December 2020. 
  42. ^ "Review of Microservices Frameworks: A Look at Spring Boot Alternatives". DZone. 
  43. ^ "Kotlin Programming - The State of Developer Ecosystem 2020". JetBrains (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  44. ^ "The state of the Octoverse". Diarsipkan dari versi asli tanggal 22 March 2019. Diakses tanggal 24 July 2019. 
  45. ^ "Stack Overflow Developer Survey 2020". Diakses tanggal 28 May 2020. 
  46. ^ "Kotlin wins Breakout Project of the Year award at OSCON '19". Diakses tanggal 24 July 2019. 
  47. ^ "State of Kotlin on Android". YouTube. Diakses tanggal 29 September 2020. 
  48. ^ "KotlinConf 2019: Kotlin Runs Taxes in Norway by Jarle Hansen & Anders Mikkelsen". YouTube. Diakses tanggal 29 September 2020. 
  49. ^ "Gradle Kotlin DSL Primer". docs.gradle.org. Diakses tanggal 29 September 2020. 
  50. ^ "QLDB at Amazon". Talking Kotlin. Diakses tanggal 29 September 2020. 
  51. ^ "Going Full Kotlin Multiplatform". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  52. ^ "Kotless". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  53. ^ "Using Kotlin for backend development at Flux". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  54. ^ "Kotlin at Allegro". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  55. ^ "Greenfield Kotlin at OLX". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  56. ^ "Kotlin at Shazam". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  57. ^ "Application Monitoring with Micrometer". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  58. ^ "Groovy and Kotlin Interop at Rocket Travel". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  59. ^ "Kotlin on the backend at Meshcloud". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  60. ^ "Zally - An API Linter". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  61. ^ "KotlinConf 2019: Kotlin in Space by Maxim Mazin". YouTube. Diakses tanggal 29 September 2020. 
  62. ^ "KotlinConf 2017 - Frontend Kotlin from the Trenches by Gaetan Zoritchak". YouTube. Diakses tanggal 29 September 2020. 
  63. ^ "Fritz2". Talking Kotlin (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  64. ^ "Java/Kotlin Developer - Barclays - Prague - Wizbii". Wizbii.com (dalam bahasa Inggris). Diakses tanggal 29 September 2020. 
  65. ^ "Kotlin in Production – What works, Whats broken". Blog.dripstat.com. 24 September 2016. Diarsipkan dari versi asli tanggal 2019-07-01. Diakses tanggal 11 April 2017. 
  66. ^ "How we made Basecamp 3's Android app 100% Kotlin – Signal v. Noise". Signal v. Noise. 29 April 2017. Diakses tanggal 1 May 2017. [pranala nonaktif permanen]
  67. ^ "Droidcon NYC 2016 - Kotlin in Production". YouTube. Diakses tanggal 24 July 2019. 
  68. ^ "Becoming bilingual@coursera". 26 April 2018. Diakses tanggal 24 July 2019. 
  69. ^ "Rob Spieldenner on twitter". Diakses tanggal 24 July 2019. 
  70. ^ "2017 Who's using Kotlin?". 7 February 2017. Diakses tanggal 24 July 2019. 
  71. ^ "square/sqldelight". GitHub. Diakses tanggal 24 July 2019. 
  72. ^ "Dan Lew on Twitter". Diakses tanggal 24 July 2019. 
  73. ^ "Duolingo on Twitter". Diakses tanggal 13 April 2020. 
  74. ^ "Kotlin 1.1 Released with JavaScript Support, Coroutines and more". Diakses tanggal 1 May 2017. 

Bahan bacaan

sunting