Kotlin Academy · Pelajaran

Keterbatasan

Hal yang tidak dapat dilakukan kelas nilai

Pelajaran 4 dari 413 langkah

Keterbatasan adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Memahami Batasannya

Kelas nilai memang kuat, tetapi memiliki batasan. Memahami batasan tersebut membantu Anda memilih alat yang tepat dan menghindari kejutan.

Tepat Satu Properti

Kelas nilai membungkus satu nilai. Untuk mengelompokkan beberapa bidang, Anda memerlukan kelas biasa atau data class.

// @JvmInline value class Range(val lo: Int, val hi: Int) // not allowed

data class Range(val lo: Int, val hi: Int)

fun main() {
    println(Range(1, 10))
}

Tidak Ada Keadaan init Selain Nilai

Kelas nilai tidak dapat memiliki bidang pendukung selain properti konstruktor satu-satunya. Keadaan tambahan var dengan bidang pendukung tidak diizinkan.

@JvmInline
value class Counter(val value: Int) {
    // val cached: Int = value * 2  // not allowed: extra backing field
    val doubled: Int get() = value * 2  // computed is fine
}

fun main() {
    println(Counter(3).doubled)
}

Tidak Ada Pewarisan

Kelas nilai secara implisit bersifat final. Kelas ini tidak dapat memperluas kelas lain dan tidak dapat diperluas. Kelas nilai hanya dapat mengimplementasikan antarmuka.

interface Named { val label: String }

@JvmInline
value class Tag(val text: String) : Named {
    override val label: String get() = text
}

fun main() {
    println(Tag("urgent").label)
}

Biaya Pembungkusan Kembali

Janji tanpa beban tambahan hilang ketika nilai digunakan sebagai tipe nullable, generik, atau antarmuka. Kompilator kemudian membungkusnya menjadi objek nyata.

@JvmInline
value class Id(val raw: Int)

fun main() {
    val list: List<Id> = listOf(Id(1), Id(2)) // boxed inside the list
    println(list.map { it.raw })
}

Tidak Memiliki Identitas

Kelas nilai tidak memiliki identitas referensial yang stabil. Kesetaraan referensi dengan === tidak bermakna, dan kelas nilai tidak dapat digunakan ketika identitas objek penting, seperti pada kunci sinkronisasi.

@JvmInline
value class Code(val value: Int)

fun main() {
    val a = Code(5)
    val b = Code(5)
    println(a == b)   // structural equality works
}

Tidak Dapat Menggunakan lateinit atau Delegasi

Anda tidak dapat menerapkan lateinit pada nilai yang mendasarinya, dan kelas nilai tidak mendukung delegasi properti pada bidang tunggalnya. Nilai tersebut harus ditetapkan di konstruktor.

@JvmInline
value class Slug(val value: String)

fun main() {
    val s = Slug("hello-world") // must be provided up front
    println(s.value)
}

Pengubahan Nama JVM

Di JVM, fungsi yang menerima parameter kelas nilai mendapatkan nama yang diubah dalam kode bita untuk menghindari benturan. Hal ini mempersulit interoperabilitas dengan Java; pemanggil Java mungkin tidak dapat melihatnya dengan baik.

@JvmInline
value class Hz(val value: Int)

fun tune(freq: Hz) = freq.value

fun main() {
    println(tune(Hz(440))) // simple from Kotlin; mangled from Java
}

Bukan untuk Pembungkus Banyak Bidang

Jika Anda merasa memerlukan dua properti, kelas nilai adalah alat yang keliru. Gunakan data class dan terima alokasi tambahan sebagai imbalan atas struktur yang lebih kaya.

data class Coordinate(val lat: Double, val lng: Double)

fun main() {
    println(Coordinate(41.0, 29.0))
}

Rangkuman Keterbatasan

Kelas nilai tidak dapat:

  • Menyimpan lebih dari satu properti
  • Memiliki bidang pendukung tambahan atau lateinit
  • Mewarisi dari kelas atau diwarisi oleh kelas
  • Menyediakan identitas referensial
  • Selalu menghindari pembungkusan

Memilih dengan Bijak

Gunakan kelas nilai untuk satu nilai yang divalidasi dan aman secara tipe. Gunakan kelas data untuk data yang dikelompokkan. Gunakan alias tipe untuk keterbacaan semata tanpa keamanan tambahan. Masing-masing memiliki kegunaannya.

Pemeriksaan Singkat

Uji pemahaman Anda tentang keterbatasan kelas nilai.

Rangkuman

Anda telah mempelajari keterbatasan kelas nilai:

  • Satu properti, tanpa bidang pendukung tambahan
  • Tidak ada pewarisan dan tidak ada identitas
  • Pembungkusan kembali terjadi saat digunakan sebagai nullable, generik, atau antarmuka
  • Pengubahan nama JVM mempersulit interoperabilitas dengan Java

Sesuaikan alat dengan kebutuhan.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Keterbatasan” gratis?

Ya — teks lengkap “Keterbatasan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Keterbatasan”?

Hal yang tidak dapat dilakukan kelas nilai Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Keterbatasan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Alias Tipe
  2. Kelas Nilai Inline
  3. Kasus Penggunaan
  4. Keterbatasan
← Kembali ke Kotlin Academy