Apa yang Baru di Kotlin 1.6?

Kotlin 1.6 memiliki fitur baru, pengelola memori eksperimental yang ditingkatkan, dan pustaka standar yang ditingkatkan. Penambahan tersebut membantu JetBrains yang semakin matang menjadi bahasa lintas platform dan lintas disiplin yang semakin populer.

Manajer Memori Asli Baru

Mungkin perubahan terbesar untuk ekosistem Kotlin adalah kedatangan manajer memori baru untuk Kotlin Native. Meskipun masih diberi label sebagai pratinjau pengembang, pengelola yang diperbarui mewakili arah yang akan diambil Kotlin di masa mendatang.

Desain yang direvisi lebih siap untuk menangani berbagai kompilasi backend yang digunakan untuk mengubah Kotlin menjadi kode platform asli untuk iOS dan Android. Terkadang platform memerlukan pengoptimalan yang berbeda untuk operasi tertentu. Pendekatan saat ini memberlakukan batas konkurensi dan dapat membuat kebocoran memori tanpa perhatian pengembang khusus.

Manajer memori generasi berikutnya mengatasi kekurangan ini. Ini menawarkan primitif bebas kebocoran untuk operasi bersamaan yang saat ini aman digunakan. Perubahan juga membawa manajemen memori asli lebih sesuai dengan manajer memori yang ada untuk pengembangan JVM.

Meskipun sistem baru tersedia di Kotlin 1.6, saat ini tidak dimaksudkan untuk penggunaan produksi. Dalam beberapa kasus, kinerja dapat dikurangi hingga 5x dibandingkan dengan pengelola memori lama. Upaya pengembangan berlanjut dengan versi kerja yang siap digunakan secara umum.

Disegel Saat Pernyataan

tertutup when Pernyataan memungkinkan Anda menerima peringatan kompiler ketika Anda lupa menangani kemungkinan kasus. Jika Anda melewati kelas tersegel, tipe boolean, atau enum ke a whenbiasanya Anda ingin melakukan tindakan eksplisit untuk setiap kemungkinan nilai input:

sealed class Drivetrain {
    data class Electric(val Power: Int) : Drivetrain()
    data class Diesel(val Power: Int) : Drivetrain()
    data class Hybrid(val Diesel: Drivetrain, val Electric: Drivetrain) : Drivetrain()
}
 
fun getTotalPowerKwh(drivetrain: DriveTrain) : Int {
    when (drivetrain) {
        is Drivetrain.Diesel -> drivetrain.Diesel.Power
        is Drivetrain.Electric -> drivetrain.Electric.Power
    }
}

Dalam contoh di atas, Drivetrain kelas yang disegel memiliki tiga kelas data di dalamnya. Itu when Pernyataan tersebut hanya menangani dua di antaranya – jika kode Anda menerima drivetrain hybrid, nilai salah akan dikembalikan.

Kompiler Kotlin sekarang akan mengingatkan Anda tentang masalah ini. Di Kotlin 1.7, tidak mencakup semua kemungkinan secara menyeluruh akan menghasilkan kesalahan kompilasi.

Perubahan Tipe Suspensi

Perubahan dari tipe reguler ke tipe penangguhan distabilkan oleh konversi kompiler otomatis. Kompiler akan secara otomatis melakukan konversi saat Anda meneruskan ekspresi reguler tipe dalam konteks di mana penangguhan tipe diharapkan.

Ini memungkinkan kode sebagai berikut:

fun createUser(name: String) {
    // ...
}
 
flow.collect(::createUser)
 
val createUserFunction = ::createUser
flow.collect(createUserFunction)

Kode ini rusak pada yang kedua flow.collect() panggilan Itu createUserFunction variabel mengacu pada definisi fungsi reguler, bukan penangguhan yang dibuat oleh panggilan pertama. Kotlin akan menangani ini dengan membuat versi yang ditangguhkan saat konteks penerima membutuhkannya.

Fungsi penangguhan juga didukung sebagai supertipe sekarang. Ini memungkinkan Anda untuk meneruskan kelas yang menerapkan suspensi ke tipe fungsional di mana pun referensi fungsi suspensi saat ini didukung.

class ImplementsSuspendingFunctionalType : suspend () -> Unit {
    override suspend fun invoke() { /* ... */ }
}

Itu suspend () -> Unit antarmuka diimplementasikan dengan cara yang sama seperti yang sudah Anda gunakan () -> Unit untuk jenis yang tidak ditangguhkan.

Pemindai Cakupan Kode

Kotlin sekarang memiliki alat pemindaian cakupan kode resmi. Kover adalah plugin Gradle yang mengumpulkan statistik cakupan pengujian untuk Kotlin JVM, Multiplatform, dan proyek Java campuran. Itu dapat menghasilkan laporan dalam format HTML dan XML.

Kover menyediakan kompatibilitas penuh dengan bahasa Kotlin dan toolchain Gradle-nya. Meskipun beberapa alat pihak ketiga sudah dapat memberikan skor cakupan, mereka ada di luar ekosistem dan tidak selalu terlihat di setiap tugas. Kover menawarkan pendekatan yang sepenuhnya terintegrasi. Pengembangan sedang berlangsung dengan rilis awal ini berlabel eksperimental.

Untuk mengaktifkan Kover, tambahkan baris berikut ke file build tingkat atas Anda:

plugins {
     id("org.jetbrains.kotlinx.kover") version "0.4.2"
}

Kover sekarang akan berjalan sebagai bagian dari build Gradle Anda.

Penambahan Perpustakaan Umum

Ada beberapa perubahan penting pada pustaka standar, termasuk mempromosikan beberapa fungsi beta agar stabil:

readln() dan readlnOrNull()

Kedua fungsi baru ini membaca dan mengembalikan satu baris dari aliran input standar. Yang pertama melempar jika tanda EOF tercapai sementara yang terakhir kembali null.

jenis()

Itu typeOf() Fungsi ini memungkinkan Anda menentukan tipe sebenarnya dari tipe reified, biasanya dinyatakan sebagai Tsaat berjalan.

inline fun <reified T> getTypeString() : String {
    val type = typeOf<T>()
    return type.toString()
}

Pembuat Koleksi

Fungsi pembangun baru memungkinkan Anda membuat koleksi dari larik nilai yang berbeda. Anda dapat menggabungkan peta, daftar, dan kumpulan ke dalam koleksi baru menggunakan fungsi kelas satu:

val fruits = listOf("apple", "banana");
val veg = listOf("carrot", "cabbage");
 
val groceries = buildList {
    add("milk")
    addAll(fruits)
    addAll(veg)
}
 
// ["milk", "apple", "banana", "carrot", "cabbage"]

Nilai Durasi

Itu Duration kelas untuk mewakili nilai waktu telah dipromosikan menjadi stabil. Ini menyediakan tipe komposit untuk menyimpan durasi periode waktu dalam kode Anda. Kelas memiliki metode yang memfasilitasi konversi mudah antar unit:

// Emits 1.0
println(60.toDuration(DurationUnit.SECONDS).inMinutes);

Perubahan Pustaka Lebih Umum

Bilangan bulat memiliki sesuatu yang baru rotateLeft() dan rotateRight() fungsi. Mereka memutar representasi biner dari nomor dengan jumlah bit tertentu dalam arah yang ditunjukkan. Regex mendapatkan fungsi pemisahan urutan dan perilaku yang konsisten untuk replace() dan replaceFirst() di seluruh lingkungan Java dan JavaScript.

Beberapa fungsi yang ada tidak digunakan lagi. Itu concat()match()dan matches() fungsi pada string, serta sort() fungsi pada array, sekarang akan mengeluarkan peringatan. Fungsionalitasnya sudah dicakup oleh opsi alternatif.

Perubahan Lainnya

Kotlin 1.6 menambahkan beberapa peningkatan ekosistem dan peningkatan kualitas hidup. Ini termasuk dukungan untuk Xcode 13 dan kemampuan untuk mengkompilasi build Windows di platform apa pun. Jika Anda menargetkan mingwX64 Hai mingwX86 untuk Windows, kini Anda dapat mengompilasi dari sistem apa pun yang mendukung pengembangan Kotlin/Native.

Peningkatan pada cache kompiler untuk build Linux dan iOS telah mengurangi separuh waktu build biasa setelah dijalankan pertama kali. Pembaruan pada rantai ketergantungan Kotlin secara signifikan mengurangi penggunaan disk. Pindah ke LLVM 11.1 mengurangi versi macOS dari 1200 MB menjadi sekitar 300 MB.

Jika Anda menggunakan JavaScript Kotlin, Anda sekarang dapat menonaktifkan unduhan otomatis Node.js dan Yarn selama proses pembuatan. Ini berguna ketika Anda mengkompilasi kode di lingkungan yang telah dikonfigurasi sebelumnya di mana host sudah menginstal dependensi ini.

Ringkasan

Kotlin 1.6 adalah rilis yang sehat dengan fitur eksperimental baru yang membuka jalan ke depan dan daftar besar perubahan bahasa dan pustaka standar yang dapat Anda gunakan hari ini. Ada juga peningkatan interoperabilitas antara ragam Kotlin sehingga lebih banyak kode akan sama baik dikompilasi untuk JVM, Native, atau JavaScript.

Pencapaian 1.6 juga melihat pengelola Kotlin menawarkan periode dukungan yang diperpanjang untuk versi API yang lebih lama. Tiga versi sebelumnya sekarang akan didukung pada irama bergulir. Ini berarti Anda saat ini dapat memilih untuk membangun terhadap Kotlin versi 1.3 hingga 1.6, memberi Anda lebih banyak waktu untuk meningkatkan versi di antara rilis.

Anda dapat bermigrasi ke Kotlin 1.6 sekarang dengan memperbarui versi IntelliJ IDEA, Android Studio, Xcode, atau compiler Kotlin CLI. Sebaiknya periksa panduan kompatibilitas terlebih dahulu untuk memastikan Anda telah mengatasi semua perhentian yang dilaporkan sebelumnya yang akan memberikan peringatan atau kesalahan di 1.6.

Leave a Comment

Your email address will not be published. Required fields are marked *