Apa Kotlin itu? Alternatif Jawa dijelaskan

Kotlin adalah bahasa pemrograman "pragmatis" tujuan umum, gratis, open source, dan diketik secara statis yang awalnya dirancang untuk JVM (Java Virtual Machine) dan Android yang menggabungkan fitur pemrograman berorientasi objek dan fungsional. Ini difokuskan pada interoperabilitas, keamanan, kejelasan, dan dukungan perkakas. Versi Kotlin yang menargetkan JavaScript ES5.1 dan kode native (menggunakan LLVM) untuk sejumlah prosesor juga sedang diproduksi.

Kotlin berasal dari JetBrains, perusahaan di belakang IntelliJ IDEA, pada tahun 2010, dan telah menjadi sumber terbuka sejak tahun 2012. Tim Kotlin saat ini memiliki lebih dari 90 anggota tetap dari JetBrains, dan proyek Kotlin di GitHub memiliki lebih dari 300 kontributor. JetBrains menggunakan Kotlin di banyak produknya termasuk andalannya IntelliJ IDEA.

Kotlin sebagai bahasa Java yang lebih ringkas

Sekilas, Kotlin terlihat seperti versi Java yang lebih ringkas dan efisien. Pertimbangkan tangkapan layar di atas, di mana saya telah mengonversi sampel kode Java (di sebelah kiri) menjadi Kotlin secara otomatis. Perhatikan bahwa pengulangan mindless yang melekat dalam membuat instance variabel Java telah hilang. Idiom Jawa

StringBuilder sb = new StringBuilder ();

Berada di Kotlin

val sb = StringBuilder ()

Anda dapat melihat bahwa fungsi ditentukan dengan funkata kunci, dan titik koma itu sekarang opsional saat ada baris baru. Kata valkunci mendeklarasikan properti read-only atau variabel lokal. Demikian pula, varkata kunci mendeklarasikan properti atau variabel lokal yang bisa berubah.

Namun demikian, Kotlin sangat diketik. Kata kunci valdan hanya vardapat digunakan jika jenisnya dapat disimpulkan. Jika tidak, Anda perlu mendeklarasikan tipe. Jenis inferensi tampaknya meningkat dengan setiap rilis Kotlin.

Lihat deklarasi fungsi di dekat bagian atas kedua panel. Jenis kembalian di Java mendahului prototipe, tetapi di Kotlin ia menggantikan prototipe, dibatasi dengan titik dua seperti di Pascal.

Tidak sepenuhnya jelas dari contoh ini, tetapi Kotlin telah melonggarkan persyaratan Java yang berfungsi menjadi anggota kelas. Di Kotlin, fungsi dapat dideklarasikan di tingkat atas dalam sebuah file, secara lokal di dalam fungsi lain, sebagai fungsi anggota di dalam kelas atau objek, dan sebagai fungsi ekstensi. Fungsi ekstensi menyediakan kemampuan seperti C # untuk memperluas kelas dengan fungsionalitas baru tanpa harus mewarisi dari kelas atau menggunakan semua jenis pola desain seperti Dekorator.

Untuk penggemar Groovy, Kotlin mengimplementasikan builder; faktanya, pembangun Kotlin bisa dicentang jenisnya. Kotlin mendukung properti yang didelegasikan, yang dapat digunakan untuk mengimplementasikan properti lazy, properti yang dapat diamati, properti yang dapat diveto, dan properti yang dipetakan.

Banyak mekanisme asinkron yang tersedia dalam bahasa lain dapat diimplementasikan sebagai pustaka menggunakan coroutine Kotlin. Ini termasuk async/ awaitdari C # dan ECMAScript, saluran dan pilih dari Go, dan generators/ yielddari C # dan Python.

Pemrograman fungsional di Kotlin

Mengizinkan fungsi level atas hanyalah awal dari cerita pemrograman fungsional untuk Kotlin. Bahasa ini juga mendukung fungsi tingkat tinggi, fungsi anonim, lambda, fungsi sebaris, penutupan, rekursi ekor, dan generik. Dengan kata lain, Kotlin memiliki semua fitur dan keunggulan bahasa fungsional. Misalnya, perhatikan idiom Kotlin fungsional berikut.

Memfilter daftar di Kotlin

val positives = list.filter {x -> x> 0}

Untuk ekspresi yang lebih pendek lagi, gunakan itjika hanya ada satu parameter dalam fungsi lambda:

val positives = list.filter {it> 0}

Melintasi peta / daftar pasangan di Kotlin

untuk ((k, v) di peta) {println (ā€œ$ k -> $ vā€)}

kdan  v bisa disebut apa saja.

Menggunakan rentang di Kotlin

untuk (i dalam  1..100) {...} // kisaran tertutup: termasuk 100

untuk (i in  1 sampai 100) {...} // half-open range: tidak termasuk 100

untuk (x dalam  2..10 langkah 2) {...}

untuk (x in  10 downTo 1) {...}

jika (x dalam  1..10) {...}

Contoh di atas menunjukkan  for kata kunci serta penggunaan rentang.

Meskipun Kotlin adalah bahasa pemrograman fungsional yang lengkap, Kotlin mempertahankan sebagian besar sifat Java yang berorientasi objek sebagai gaya pemrograman alternatif, yang sangat berguna saat mengonversi kode Java yang ada. Kotlin memiliki kelas dengan konstruktor, bersama dengan kelas dalam bersarang, batin, dan anonim, dan memiliki antarmuka seperti Java 8. Kotlin tidak memiliki newkata kunci. Untuk membuat instance kelas, panggil konstruktor seperti fungsi biasa. Kami melihatnya pada gambar di atas.

Kotlin memiliki satu warisan dari superclass bernama, dan semua kelas Kotlin memiliki superclass default Any, yang tidak sama dengan kelas dasar Java java.lang.Object. Anyhanya tiga yang telah ditetapkan fungsi anggota: equals(), hashCode(), dan toString().

Kelas Kotlin harus ditandai dengan openkata kunci untuk memungkinkan kelas lain mewarisi darinya; Kelas Java adalah jenis kebalikannya, karena mereka dapat diturunkan kecuali ditandai dengan finalkata kunci. Untuk mengganti metode superclass, metode itu sendiri harus ditandai open, dan metode subclass harus ditandai override. Ini semua adalah bagian dari filosofi Kotlin untuk membuat segala sesuatunya eksplisit daripada mengandalkan default. Dalam kasus khusus ini, saya dapat melihat di mana cara Kotlin menandai secara eksplisit anggota kelas dasar sebagai terbuka untuk warisan dan anggota kelas turunan sebagai penggantian menghindari beberapa jenis kesalahan umum Java.

Fitur keamanan di Kotlin

Berbicara tentang menghindari error umum, Kotlin dirancang untuk menghilangkan bahaya referensi pointer null dan menyederhanakan penanganan nilai null. Ini dilakukan dengan membuat nullilegal untuk tipe standar, menambahkan tipe nullable, dan mengimplementasikan notasi pintasan untuk menangani tes untuk null.

Misalnya, variabel tipe reguler  tidak dapat menampung  :String null

var a: String = "abc"

a = null // kesalahan kompilasi

Jika Anda perlu mengizinkan null, misalnya untuk menampung hasil kueri SQL, Anda dapat mendeklarasikan tipe nullable dengan menambahkan tanda tanya ke jenis tersebut, misalnya String?.

var  b: String?

b = null  // oke

Perlindungan melangkah lebih jauh. Anda dapat menggunakan jenis non-nullable dengan impunitas, tetapi Anda harus menguji jenis nullable untuk nilai null sebelum menggunakannya.

Untuk menghindari tata bahasa verbose yang biasanya diperlukan untuk pengujian null, Kotlin memperkenalkan panggilan aman , tertulis ?.. Misalnya, mengembalikan jika tidak , dan sebaliknya. Jenis ekspresi ini adalah .b?.length b.lengthbnullnullInt?

Dengan kata lain, b?.lengthmerupakan jalan pintas untuk if (b != null) b.length else null. Sintaks ini berantai dengan baik, menghilangkan cukup banyak logika prolix, terutama ketika sebuah objek diisi dari serangkaian kueri database, yang mana pun mungkin gagal. Misalnya, bob?.department?.head?.nameakan mengembalikan nama kepala departemen Bob jika Bob, departemen, dan kepala departemen semuanya bukan nol.

Untuk melakukan operasi tertentu hanya untuk nilai non-null, Anda dapat menggunakan operator panggilan aman ?.bersama dengan  let:

val listWithNulls: List = listOf ("A", null)

untuk (item dalam listWithNulls) {

      item? .let {println (it)} // mencetak A dan mengabaikan null}

Seringkali Anda ingin mengembalikan nilai yang valid tetapi khusus dari ekspresi nullable, biasanya agar Anda dapat menyimpannya ke dalam tipe non-nullable. Ada sintaks khusus untuk ini yang disebut operator Elvis (I kid you not), tertulis ?:.

val l = b? .length?: -1

setara dengan 

val l: Int = if (b! = null) b.length lain -1

Dengan nada yang sama, Kotlin menghilangkan pengecualian yang dicentang dari Java, yang merupakan kondisi yang dapat dibuang yang harus ditangkap. Misalnya, tanda tangan JDK

Appendable append (CharSequence csq) menampilkan  IOException;

mengharuskan Anda untuk menangkap IOExceptionsetiap kali Anda memanggil appendmetode:

coba {

  log.append (pesan)

}

catch (IOException e) {

  // Lakukan sesuatu dengan pengecualian

}

Para perancang Java berpikir ini adalah ide yang bagus, dan itu adalah kemenangan bersih untuk program mainan, selama programmer menerapkan sesuatu yang masuk akal dalam catchklausul tersebut. Semua terlalu sering dalam program Java yang besar, namun, Anda melihat kode di mana wajib catchklausa berisi apa-apa kecuali komentar: //todo: handle this. Ini tidak membantu siapa pun, dan pengecualian yang dicentang ternyata merupakan kerugian bersih untuk program besar.

Coroutine Kotlin

Coroutine di Kotlin pada dasarnya adalah thread yang ringan. Anda memulainya dengan launchpembuat coroutine dalam konteks beberapa CoroutineScope. Salah satu cakupan coroutine yang paling berguna adalah runBlocking{}, yang berlaku untuk cakupan blok kodenya.

import kotlinx.coroutines. *

fun main () = runBlocking {// ini: CoroutineScope

    luncurkan {// luncurkan coroutine baru dalam cakupan runBlocking

        delay (1000L) // penundaan non-blocking selama 1 detik

        println ("Dunia!")

    }

    println ("Halo,")

}

Kode ini menghasilkan keluaran berikut, dengan jeda satu detik antar baris:

Halo,

Dunia!

Kotlin untuk Android

Hingga Mei 2017, satu-satunya bahasa pemrograman yang didukung secara resmi untuk Android adalah Java dan C ++. Google mengumumkan dukungan resmi untuk Kotlin pada Android di Google I / O 2017, dan dimulai dengan Android Studio 3.0 Kotlin dibangun ke dalam perangkat pengembangan Android. Kotlin dapat ditambahkan ke versi Android Studio sebelumnya dengan plug-in.

Kotlin mengompilasi ke kode byte yang sama seperti Java, bekerja sama dengan kelas Java secara alami, dan membagikan perkakasnya dengan Java. Karena tidak ada overhead untuk panggilan bolak-balik antara Kotlin dan Java, menambahkan Kotlin secara bertahap ke aplikasi Android yang saat ini ada di Java sangat masuk akal. Beberapa kasus di mana interoperabilitas antara kode Kotlin dan Java tidak memiliki keanggunan, seperti properti set-only Java, jarang ditemui dan diperbaiki dengan mudah.

Pinterest adalah anak poster untuk aplikasi Android yang ditulis di Kotlin pada awal November 2016, dan disebutkan secara mencolok di Google I / O 2017 sebagai bagian dari pengumuman Kotlin. Selain itu, tim Kotlin suka mengutip aplikasi Evernote, Trello, Square, dan Coursera untuk Android.

Kotlin vs. Java

Pertanyaan apakah akan memilih Kotlin atau Java untuk pengembangan baru telah banyak muncul di komunitas Android sejak pengumuman Google I / O, meskipun orang sudah mengajukan pertanyaan pada Februari 2016 ketika Kotlin 1.0 dikirimkan. Jawaban singkatnya adalah kode Kotlin lebih aman dan lebih ringkas daripada kode Java, dan bahwa file Kotlin dan Java dapat hidup berdampingan di aplikasi Android, sehingga Kotlin tidak hanya berguna untuk aplikasi baru, tetapi juga untuk memperluas aplikasi Java yang sudah ada.

Satu-satunya argumen meyakinkan yang saya lihat untuk memilih Java daripada Kotlin adalah untuk kasus pemula pengembangan Android yang lengkap. Bagi mereka, mungkin ada hambatan yang harus diatasi mengingat, secara historis, sebagian besar dokumentasi dan contoh Android ada di Java. Di sisi lain, mengonversi Java ke Kotlin di Android Studio cukup dengan menempelkan kode Java ke dalam file Kotlin.

Bagi hampir semua orang yang melakukan pengembangan Android, keunggulan Kotlin sangat menarik. Biasanya waktu yang dikutip untuk developer Java untuk mempelajari Kotlin adalah beberapa jam ā€” harga murah yang harus dibayar untuk menghilangkan error referensi null, mengaktifkan fungsi ekstensi, mendukung pemrograman fungsional, dan menambahkan coroutine. Perkiraan kasar tipikal menunjukkan sekitar 40 persen pengurangan jumlah baris kode dari Java ke Kotlin.