Apa itu Kotlin? Alternatif Java menjelaskan
Kotlin adalah bahasa pengaturcaraan "pragmatik" dengan tujuan umum, bebas, sumber terbuka, yang ditaip secara statik yang pada mulanya dirancang untuk JVM (Java Virtual Machine) dan Android yang menggabungkan fitur pengaturcaraan berorientasi objek dan berfungsi. Ia difokuskan pada interoperabilitas, keselamatan, kejelasan, dan sokongan perkakas. Versi Kotlin yang mensasarkan JavaScript ES5.1 dan kod asli (menggunakan LLVM) untuk sebilangan pemproses juga sedang dalam pengeluaran.
Kotlin berasal dari JetBrains, syarikat di belakang IntelliJ IDEA, pada tahun 2010, dan telah menjadi sumber terbuka sejak tahun 2012. Pasukan Kotlin kini mempunyai lebih daripada 90 anggota sepenuh masa dari JetBrains, dan projek Kotlin di GitHub mempunyai lebih daripada 300 penyumbang. JetBrains menggunakan Kotlin dalam banyak produknya termasuk IntelliJ IDEA utamanya.

Kotlin sebagai bahasa Jawa yang lebih ringkas
Pada pandangan pertama, Kotlin kelihatan seperti versi Java yang lebih ringkas dan ringkas. Pertimbangkan tangkapan skrin di atas, di mana saya telah menukar sampel kod Java (di sebelah kiri) ke Kotlin secara automatik. Perhatikan bahawa pengulangan tanpa akal yang wujud dalam memberi contoh pemboleh ubah Java telah hilang. Ungkapan Java
StringBuilder sb = StringBuilder baru ();
Menjadi di Kotlin
val sb = StringBuilder ()
Anda dapat melihat bahawa fungsi didefinisikan dengan fun
kata kunci, dan titik koma kini menjadi pilihan apabila barisan baru ada. Kata val
kunci menyatakan sifat hanya baca atau pemboleh ubah tempatan Begitu juga, var
kata kunci menyatakan harta berubah atau pemboleh ubah tempatan.
Walaupun begitu, Kotlin sangat ditaip. Kata kunci val
dan var
kata kunci hanya boleh digunakan apabila jenisnya dapat disimpulkan. Jika tidak, anda perlu menyatakan jenisnya. Kesimpulan jenis nampaknya bertambah baik dengan setiap pelepasan Kotlin.
Lihat pernyataan fungsi berhampiran bahagian atas kedua panel. Jenis pengembalian di Java mendahului prototaip, tetapi di Kotlin menggantikan prototaip, dibatasi dengan titik dua seperti di Pascal.
Tidak jelas sepenuhnya dari contoh ini, tetapi Kotlin telah melonggarkan syarat Java yang berfungsi sebagai anggota kelas. Di Kotlin, fungsi dapat dinyatakan di tingkat atas dalam file, secara lokal di dalam fungsi lain, sebagai fungsi anggota di dalam kelas atau objek, dan sebagai fungsi perpanjangan. Fungsi peluasan memberikan kemampuan seperti C # untuk memperluas kelas dengan fungsi baru tanpa perlu mewarisi dari kelas atau menggunakan apa-apa jenis corak reka bentuk seperti Dekorasi.
Bagi peminat Groovy, Kotlin melaksanakan pembangun; sebenarnya, pembangun Kotlin boleh diperiksa jenisnya. Kotlin menyokong sifat yang didelegasikan, yang dapat digunakan untuk menerapkan sifat malas, sifat yang dapat dilihat, harta yang dapat dipadam, dan sifat yang dipetakan.
Banyak mekanisme tak segerak yang tersedia dalam bahasa lain dapat dilaksanakan sebagai perpustakaan menggunakan coroutines Kotlin. Ini termasuk async
/ await
dari C # dan ECMAScript, saluran dan pilih dari Go, dan generators
/ yield
dari C # dan Python.
Pengaturcaraan berfungsi di Kotlin
Membolehkan fungsi tingkat atas hanyalah permulaan kisah pengaturcaraan fungsional untuk Kotlin. Bahasa ini juga menyokong fungsi pesanan tinggi, fungsi tanpa nama, lambdas, fungsi sebaris, penutupan, pengulangan ekor, dan generik. Dengan kata lain, Kotlin mempunyai semua ciri dan kelebihan bahasa yang berfungsi. Sebagai contoh, pertimbangkan simpulan bahasa Kotlin berikut.
Menyaring senarai di Kotlin
val positives = list.filter {x -> x> 0}
Untuk ungkapan yang lebih pendek, gunakan it
apabila hanya ada satu parameter dalam fungsi lambda:
val positives = list.filter {it> 0}
Melintasi peta / senarai pasangan di Kotlin
untuk ((k, v) dalam peta) {println (ā$ k -> $ vā)}
k
dan v
boleh disebut apa sahaja.
Menggunakan julat di Kotlin
untuk (i dalam 1..100) {...} // jarak tertutup: termasuk 100untuk (i dalam 1 hingga 100) {...} // julat separuh terbuka: tidak termasuk 100
untuk (x dalam 2..10 langkah 2) {...}
untuk (x dalam 10 turun Ke 1) {...}
jika (x dalam 1..10) {...}
Contoh di atas menunjukkan for
kata kunci dan juga penggunaan julat.
Walaupun Kotlin adalah bahasa pengaturcaraan fungsional yang lengkap, ia mempertahankan sebagian besar sifat berorientasi objek Java sebagai gaya pengaturcaraan alternatif, yang sangat berguna ketika mengubah kod Java yang ada. Kotlin mempunyai kelas dengan pembina, bersama dengan kelas dalaman bersarang, dalaman, dan tanpa nama, dan ia mempunyai antara muka seperti Java 8. Kotlin tidak mempunyai new
kata kunci. Untuk membuat contoh kelas, panggil konstruktor seperti fungsi biasa. Kami melihatnya dalam tangkapan skrin di atas.
Kotlin mempunyai warisan tunggal dari superclass bernama, dan semua kelas Kotlin memiliki superclass default Any
, yang tidak sama dengan kelas dasar Java java.lang.Object
. Any
mengandungi hanya tiga fungsi ahli yang telah ditetapkan: equals()
, hashCode()
, dan toString()
.
Kelas Kotlin mesti ditandai dengan open
kata kunci untuk membolehkan kelas lain mewarisi dari mereka; Kelas Java adalah sebaliknya, kerana mereka boleh diwarisi kecuali ditandai dengan final
kata kunci. Untuk mengatasi kaedah superclass, kaedah itu sendiri mesti ditandakan open
, dan kaedah subkelas mesti ditandakan override
. Ini semua sesuai dengan falsafah Kotlin untuk membuat sesuatu yang eksplisit dan bukannya bergantung pada default Dalam kes tertentu ini, saya dapat melihat di mana cara Kotlin secara eksplisit menandakan anggota kelas dasar sebagai terbuka untuk warisan dan ahli kelas turunan sebagai pengganti mengelakkan beberapa jenis kesalahan Java yang biasa.
Ciri keselamatan di Kotlin
Berbicara untuk mengelakkan kesalahan biasa, Kotlin dirancang untuk menghilangkan bahaya rujukan penunjuk nol dan menyederhanakan pengendalian nilai nol. Ia melakukannya dengan membuat yang null
tidak sah untuk jenis standard, menambahkan jenis yang tidak dapat ditolak, dan menerapkan notasi jalan pintas untuk menangani ujian untuk nol.
Sebagai contoh, jenis pemboleh ubah biasa tidak dapat menahan :String
null
var a: String = "abc"ralat penyusunan = null //
Sekiranya anda perlu membiarkan nol, misalnya untuk menahan hasil pertanyaan SQL, anda boleh menyatakan jenis nullable dengan menambahkan tanda tanya pada jenisnya, mis String?
.
var b: Rentetan?b = batal // ok
Perlindungan melangkah lebih jauh. Anda boleh menggunakan jenis yang tidak boleh ditolak dengan impuniti, tetapi anda harus menguji jenis yang tidak dapat ditolak untuk nilai nol sebelum menggunakannya.
Untuk mengelakkan tatabahasa verbose yang biasanya diperlukan untuk ujian nol, Kotlin memperkenalkan panggilan selamat , bertulis ?.
. Contohnya, mengembalikan jika tidak , dan sebaliknya. Jenis ungkapan ini adalah .b?.length
b.length
b
null
null
Int?
Dengan kata lain, b?.length
adalah jalan pintas untuk if (b != null) b.length else null
. Sintaks ini berantai dengan baik, menghilangkan banyak logik prolix, terutama ketika suatu objek diisi dari serangkaian pertanyaan pangkalan data, yang mana mungkin gagal. Sebagai contoh, bob?.department?.head?.name
akan mengembalikan nama ketua jabatan Bob jika Bob, ketua jabatan, dan ketua jabatan semuanya tidak batal.
Untuk melakukan operasi tertentu hanya untuk nilai bukan nol, anda boleh menggunakan operator panggilan selamat ?.
bersama dengan let
:
val listWithNulls: List = listOf ("A", null)untuk (item dalam listWithNulls) {
item? .let {println (it)} // mencetak A dan mengabaikan nol}
Selalunya anda ingin mengembalikan nilai yang sah tetapi istimewa dari ungkapan yang tidak dapat ditolak, biasanya supaya anda dapat menyimpannya menjadi jenis yang tidak boleh dibatalkan. Terdapat sintaks khas untuk ini yang disebut operator Elvis (saya tidak suka), ditulis ?:
.
val l = b? .lagi?: -1
adalah setara dengan
val l: Int = if (b! = null) b. panjang lain -1
Dengan cara yang sama, Kotlin menghilangkan pengecualian yang diperiksa oleh Java, yang merupakan keadaan boleh dilempar yang harus ditangkap. Contohnya, tandatangan JDK
Appendend appendable (CharSequence csq) melemparkan IOException;
menghendaki anda menangkap IOException
setiap kali anda memanggil append
kaedah:
cuba {log.append (mesej)
}
tangkapan (IOException e) {
// Lakukan sesuatu dengan pengecualian
}
Pereka Java menganggap ini adalah idea yang baik, dan itu adalah kemenangan bersih untuk program mainan, selagi pengaturcara menerapkan sesuatu yang masuk akal dalam catch
klausa tersebut. Semua terlalu kerap dalam program Java besar, bagaimanapun, anda melihat kod di mana mandatori catch
fasal mengandungi apa-apa tetapi komen: //todo: handle this
. Ini tidak membantu sesiapa pun, dan pengecualian yang diperiksa ternyata merupakan kerugian bersih untuk program besar.
Kotout coroutine
Coroutine di Kotlin pada dasarnya adalah benang ringan. Anda memulakannya dengan pembangun launch
coroutine dalam konteks beberapa CoroutineScope
. Salah satu ruang lingkup coroutine yang paling berguna adalah runBlocking{}
, yang berlaku untuk ruang lingkup blok kodnya.
import kotlinx.coroutines. *fun main () = runBlocking {// ini: CoroutineScope
melancarkan {// melancarkan coroutine baru dalam skop runBlocking
kelewatan (1000L) // kelewatan tanpa sekatan selama 1 saat
println ("Dunia!")
}
println ("Helo,")
}
Kod ini menghasilkan output berikut, dengan kelewatan satu saat antara baris:
Helo,
Dunia!
Kotlin untuk Android
Sehingga Mei 2017, satu-satunya bahasa pengaturcaraan yang disokong secara rasmi untuk Android adalah Java dan C ++. Google mengumumkan sokongan rasmi untuk Kotlin pada Android di Google I / O 2017, dan bermula dengan Android Studio 3.0 Kotlin dimasukkan ke dalam set alat pengembangan Android. Kotlin dapat ditambahkan ke Android Studio versi sebelumnya dengan pemalam.
Kotlin menyusun kod byte yang sama dengan Java, beroperasi dengan kelas Java dengan cara semula jadi, dan berkongsi perkakasnya dengan Java. Oleh karena tidak ada overhead untuk memanggil bolak-balik antara Kotlin dan Java, menambahkan Kotlin secara bertahap ke aplikasi Android saat ini di Java masuk akal. Beberapa kes di mana interoperabilitas antara Kotlin dan kod Java tidak mempunyai rahmat, seperti sifat set-Java sahaja, jarang ditemui dan mudah diperbaiki.
Pinterest adalah anak poster untuk aplikasi Android yang ditulis di Kotlin pada awal November 2016, dan itu disebut dengan jelas di Google I / O 2017 sebagai sebahagian daripada pengumuman Kotlin. Selain itu, pasukan Kotlin suka memetik aplikasi Evernote, Trello, Square, dan Coursera untuk Android.
Kotlin lwn Jawa
Persoalan apakah memilih Kotlin atau Java untuk pengembangan baru telah banyak muncul di komunitas Android sejak pengumuman Google I / O, walaupun orang sudah mengajukan pertanyaan pada Februari 2016 ketika Kotlin 1.0 dikirim. Jawapan ringkasnya adalah bahawa kod Kotlin lebih selamat dan lebih ringkas daripada kod Java, dan bahawa fail Kotlin dan Java dapat wujud bersama dalam aplikasi Android, sehingga Kotlin tidak hanya berguna untuk aplikasi baru, tetapi juga untuk memperluas aplikasi Java yang ada.
Satu-satunya hujah yang tepat yang saya lihat untuk memilih Java daripada Kotlin adalah untuk pemula pembangunan Android yang lengkap. Bagi mereka, mungkin ada penghalang untuk mengatasi memandangkan, secara historis, kebanyakan dokumentasi dan contoh Android ada di Java. Sebaliknya, mengubah Java menjadi Kotlin di Android Studio adalah perkara mudah untuk menyisipkan kod Java ke dalam file Kotlin.
Bagi hampir semua orang yang melakukan pembangunan Android, kelebihan Kotlin sangat menarik. Waktu biasa yang dikutip untuk pengembang Java untuk belajar Kotlin adalah beberapa jam ā harga yang kecil untuk membayar untuk menghilangkan kesalahan rujukan nol, mengaktifkan fungsi peluasan, menyokong pengaturcaraan fungsional, dan menambahkan coroutine. Anggaran kasar khas menunjukkan kira-kira 40 peratus pemotongan bilangan baris kod dari Jawa ke Kotlin.