0Pricing
Kotlin Academy · Pelajaran

Kelas Nilai Inline

Bungkus tanpa overhead

Kelas Nilai Inline adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Masalah Pembungkusan

Membungkus tipe primitif dalam sebuah kelas menambah keamanan tipe, tetapi biasanya memerlukan alokasi pada tumpukan. Kelas nilai memberikan keamanan tersebut, sementara kompiler menghapus pembungkusnya jika memungkinkan.

Mendeklarasikan Kelas Nilai

Tandai sebuah kelas dengan @JvmInline value class dan tepat satu properti di konstruktor utama. Kelas ini berperilaku sebagai tipe yang berbeda.

@JvmInline
value class Password(val value: String)

fun main() {
    val p = Password("secret")
    println(p.value)
}

Tipe yang Berbeda

Berbeda dari alias tipe, kelas nilai merupakan tipe terpisah. Anda tidak dapat secara tidak sengaja meneruskan String mentah ketika yang diharapkan adalah Password.

@JvmInline
value class Password(val value: String)

fun login(p: Password) = println("login with " + p.value)

fun main() {
    login(Password("hunter2"))
}

Tanpa Beban Tambahan

Saat dijalankan, kompilator biasanya menyisipkan langsung nilai yang mendasarinya, sehingga tidak ada alokasi objek tambahan. Dalam sebagian besar jalur kode, Password direpresentasikan sebagai String biasa.

@JvmInline
value class Meters(val amount: Double)

fun main() {
    val d = Meters(5.0)
    println(d.amount) // stored inline as a Double
}

Metode dan Properti

Kelas nilai dapat memiliki fungsi dan properti terhitung, sama seperti kelas biasa.

@JvmInline
value class Celsius(val degrees: Double) {
    fun toFahrenheit() = degrees * 9 / 5 + 32
}

fun main() {
    println(Celsius(100.0).toFahrenheit())
}

Blok init untuk Validasi

Blok init memungkinkan Anda memvalidasi nilai yang dibungkus saat konstruksi, sehingga setiap instans dijamin valid.

@JvmInline
value class Percentage(val value: Int) {
    init {
        require(value in 0..100) { "out of range" }
    }
}

fun main() {
    println(Percentage(75).value)
}

Properti Terhitung

Anda dapat menambahkan properti terhitung yang diturunkan dari satu-satunya nilai tersimpan, sehingga logika tetap dekat dengan tipe tersebut.

@JvmInline
value class Seconds(val value: Int) {
    val asMinutes: Double get() = value / 60.0
}

fun main() {
    println(Seconds(120).asMinutes)
}

Mengimplementasikan Antarmuka

Kelas nilai dapat mengimplementasikan antarmuka, sehingga dapat digunakan secara polimorfis. Catatan: tindakan ini dapat memaksa pembungkusan ketika kelas nilai diperlakukan sebagai tipe antarmuka.

interface Describable {
    fun describe(): String
}

@JvmInline
value class Money(val cents: Int) : Describable {
    override fun describe() = "$" + cents / 100.0
}

fun main() {
    println(Money(1599).describe())
}

Kapan Pembungkusan Terjadi

Pembungkus muncul kembali (pembungkusan) ketika nilai digunakan sebagai nullable, sebagai antarmuka, atau dalam koleksi generik. Dalam kasus tersebut, kompilator membuat objek nyata — tetap benar, hanya kurang efisien.

@JvmInline
value class Id(val raw: Int)

fun main() {
    val direct = Id(1)        // inlined
    val boxed: Id? = Id(2)    // boxed because nullable
    println("" + direct.raw + " " + boxed?.raw)
}

kelas nilai vs kelas data

data class selalu melakukan alokasi dan dapat menyimpan banyak properti. value class menyimpan tepat satu properti dan ditujukan untuk menghilangkan beban tambahan. Pilih kelas nilai untuk pembungkus tipis yang aman secara tipe di sekitar satu nilai.

Mengapa Ini Penting

Kelas nilai memungkinkan Anda:

  • Mencegah tertukarnya parameter dengan tipe yang sama
  • Menambahkan validasi pada tipe primitif
  • Biasanya tidak menanggung biaya tambahan saat dijalankan

Kelas nilai merupakan jawaban yang aman secara tipe untuk situasi ketika alias tipe tidak memadai.

Pemeriksaan Singkat

Uji pemahaman Anda tentang kelas nilai dengan penyisipan langsung.

Rangkuman

Anda telah mempelajari kelas nilai dengan penyisipan langsung:

  • Dideklarasikan dengan @JvmInline value class dan satu properti
  • Merupakan tipe yang berbeda dengan biasanya tanpa beban tambahan
  • Mendukung metode, properti terhitung, dan validasi init
  • Pembungkusan terjadi saat digunakan sebagai nullable, generik, atau antarmuka

Berikutnya: kasus penggunaan di dunia nyata.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kelas Nilai Inline” gratis?

Ya — teks lengkap “Kelas Nilai Inline” 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 “Kelas Nilai Inline”?

Bungkus tanpa overhead 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 2 dari 4.

Berapa lama pelajaran “Kelas Nilai Inline” 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