Getter dan Setter Kustom dengan field
Tulislah properti terhitung dan setter kustom menggunakan kata kunci field sebagai penyimpan nilai.
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.
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
- Konstruktor Utama dan Parameter Properti
- Blok init dan Urutan Inisialisasi
- Getter dan Setter Kustom dengan field
- lateinit dan Inisialisasi Tertunda