Kotlin Academy · Pelajaran

Getter dan Setter Kustom dengan field

Tulislah properti terhitung dan setter kustom menggunakan kata kunci field sebagai penyimpan nilai.

Pelajaran 3 dari 413 langkah

Getter dan Setter Kustom dengan field adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Properti Bukan Sekadar Bidang Penyimpanan

Setiap properti Kotlin memiliki pengambil yang dibuat otomatis (dan untuk var, penyetel). Anda dapat menggantinya untuk menambahkan logika — validasi, pencatatan, atau perhitungan.

Pengambil Kustom

Ganti get() untuk menghitung nilai setiap kali nilai tersebut dibaca.

class Circle(val radius: Double) {
    val area: Double
        get() = Math.PI * radius * radius
}
fun main() {
    val c = Circle(3.0)
    println(c.area) // ~28.27
}

Properti Terhitung

Properti terhitung tidak memiliki bidang penyimpanan — nilainya dihitung setiap kali diakses.

class Rectangle(val w: Int, val h: Int) {
    val area get() = w * h
    val perimeter get() = 2 * (w + h)
}
fun main() {
    val r = Rectangle(3, 4)
    println("${r.area}, ${r.perimeter}") // 12, 14
}

Penyetel Kustom dengan field

Di dalam penyetel kustom, field merujuk pada bidang penyimpanan — tempat penyimpanan sebenarnya.

class Temperature {
    var celsius: Double = 0.0
        set(value) {
            require(value >= -273.15) { "below absolute zero" }
            field = value
        }
}
fun main() {
    val t = Temperature()
    t.celsius = 25.0
    println(t.celsius)
    // t.celsius = -300.0 // throws
}

Bidang Penyimpanan Dibuat Otomatis

Jika pengambil/penyetel menggunakan field, Kotlin membuat bidang penyimpanan. Jika tidak satu pun menggunakannya, tidak ada bidang yang dibuat — properti tersebut sepenuhnya merupakan properti terhitung.

class Counter {
    var count: Int = 0
        set(value) {
            println("Setting count from $field to $value")
            field = value
        }
}
fun main() {
    val c = Counter()
    c.count = 5
    c.count = 10
}

Penyetel dengan Efek Samping

Gunakan penyetel kustom untuk pencatatan, pemberitahuan perubahan, atau sinkronisasi keadaan terkait.

class Brightness {
    var level: Int = 50
        set(value) {
            val clamped = value.coerceIn(0, 100)
            println("Brightness -> $clamped")
            field = clamped
        }
}
fun main() {
    val b = Brightness()
    b.level = 75
    b.level = 150 // clamps to 100
    println(b.level)
}

Penyetel Privat

Tandai penyetel sebagai private untuk menyediakan API hanya-baca sekaligus memungkinkan mutasi internal.

class Score {
    var value: Int = 0
        private set
    fun increment() { value++ }
    fun reset() { value = 0 }
}
fun main() {
    val s = Score()
    s.increment(); s.increment()
    println(s.value) // 2
    // s.value = 100 // ERROR: setter is private
}

Validasi dalam Penyและtel

Penyetel kustom merupakan tempat alami untuk validasi input.

class Email {
    var address: String = ""
        set(value) {
            require(value.contains("@")) { "invalid email" }
            field = value
        }
}
fun main() {
    val e = Email()
    e.address = "ada@example.com"
    println(e.address)
}

Pengambil dengan Logika

Pengambil dapat mengubah keadaan yang tersimpan — misalnya memformat nilai tersimpan atau menerapkan nilai cadangan bawaan.

class Profile(_name: String?) {
    var rawName: String? = _name
    val displayName: String
        get() = rawName ?: "(unset)"
}
fun main() {
    val p = Profile(null)
    println(p.displayName) // (unset)
}

Membandingkan val dan var

Properti val hanya memiliki pengambil (tanpa penyetel); properti var memiliki keduanya.

class Box {
    val readOnly: Int get() = 42
    var readWrite: Int = 0
}
fun main() {
    println(Box().readOnly)
    val b = Box(); b.readWrite = 5; println(b.readWrite)
}

Kesalahan Umum: Rekursi

Jangan gunakan nama properti di dalam accessor-nya sendiri—hal itu menyebabkan rekursi tak terbatas. Gunakan field sebagai gantinya.

class Wrong {
    var x: Int = 0
        set(value) {
            // x = value // INFINITE RECURSION — calls setter again
            field = value // CORRECT
        }
}
fun main() {
    val w = Wrong(); w.x = 42; println(w.x)
}

Pemeriksaan Cepat

Di dalam setter khusus, apa yang dirujuk oleh identifier field?

Ringkasan

Override get() dan set() untuk menambahkan logika pada akses properti. Gunakan field di dalam accessor untuk membaca atau menulis field pendukung. Tandai setter sebagai private untuk API publik yang hanya dapat dibaca; gunakan properti terhitung (tanpa field pendukung) jika nilainya selalu diturunkan.

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 “Getter dan Setter Kustom dengan field” gratis?

Ya — teks lengkap “Getter dan Setter Kustom dengan field” 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 “Getter dan Setter Kustom dengan field”?

Tulislah properti terhitung dan setter kustom menggunakan kata kunci field sebagai penyimpan 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 3 dari 4.

Berapa lama pelajaran “Getter dan Setter Kustom dengan field” 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. Konstruktor Utama dan Parameter Properti
  2. Blok init dan Urutan Inisialisasi
  3. Getter dan Setter Kustom dengan field
  4. lateinit dan Inisialisasi Tertunda
← Kembali ke Kotlin Academy