Kata Kunci by
Delegasikan implementasi interface
Kata Kunci by adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Delegasi?
Delegasi kelas memungkinkan satu objek menyerahkan implementasi sebuah antarmuka kepada objek lain. Kotlin menyediakan kemampuan ini dalam bahasanya melalui kata kunci by.
Inilah komposisi yang dibuat mudah.
Antarmuka untuk Didelegasikan
Mulailah dengan sebuah antarmuka dan implementasi konkret. Selanjutnya, kita akan mendelegasikan pekerjaan kepada implementasi ini.
interface Speaker {
fun speak(): String
}
class LoudSpeaker : Speaker {
override fun speak() = "HELLO!"
}
fun main() {
println(LoudSpeaker().speak())
}Kata Kunci by
Tuliskan class X(d: Iface) : Iface by d. Kompilator menghasilkan metode penerusan yang memanggil d untuk setiap anggota antarmuka.
interface Speaker {
fun speak(): String
}
class LoudSpeaker : Speaker {
override fun speak() = "HELLO!"
}
class Announcer(s: Speaker) : Speaker by s
fun main() {
val a = Announcer(LoudSpeaker())
println(a.speak())
}Tanpa Kode Berulang
Tanpa by, Anda harus menulis metode penerusan untuk setiap fungsi antarmuka secara manual. Delegasi membuat semuanya secara otomatis.
interface Repository {
fun save(item: String): String
fun count(): Int
}
class MemoryRepo : Repository {
private val items = mutableListOf<String>()
override fun save(item: String): String { items.add(item); return item }
override fun count() = items.size
}
class LoggingRepo(r: Repository) : Repository by r
fun main() {
val repo = LoggingRepo(MemoryRepo())
repo.save("a")
println(repo.count())
}Menimpa Anggota Tertentu
Anda dapat menimpa hanya anggota yang ingin disesuaikan; anggota lainnya tetap diteruskan kepada objek delegasi.
interface Repository {
fun save(item: String): String
fun count(): Int
}
class MemoryRepo : Repository {
private val items = mutableListOf<String>()
override fun save(item: String): String { items.add(item); return item }
override fun count() = items.size
}
class LoggingRepo(private val r: Repository) : Repository by r {
override fun save(item: String): String {
println("saving " + item)
return r.save(item)
}
}
fun main() {
val repo = LoggingRepo(MemoryRepo())
repo.save("book")
println(repo.count())
}Delegasi sebagai Parameter
Objek delegasi biasanya diteruskan melalui konstruktor utama. Anda dapat menyimpan referensi dengan private val jika Anda juga menimpa beberapa anggota.
interface Clock { fun now(): Int }
class FixedClock : Clock { override fun now() = 12 }
class App(private val clock: Clock) : Clock by clock
fun main() {
println(App(FixedClock()).now())
}Mendelegasikan Antarmuka Standar
Anda dapat mendelegasikan kepada antarmuka koleksi bawaan dan langsung memperoleh pembungkus yang berperilaku seperti koleksi yang mendasarinya.
class TaggedList(private val inner: List<String>) : List<String> by inner {
val tag = "v1"
}
fun main() {
val tl = TaggedList(listOf("x", "y"))
println(tl.size)
println(tl[0])
println(tl.tag)
}Cara Kompilasinya
Di balik layar, kompilator menyimpan objek delegasi dan menghasilkan implementasi penerusan. Metode yang dihasilkan cukup memanggil metode yang sesuai pada objek delegasi. Hasilnya sama seperti penerusan yang ditulis manual, tanpa pengetikan berulang.
Cuplikan yang Diambil
Perincian penting: referensi objek delegasi diambil saat objek dibuat. Anggota yang ditimpa memanggil objek delegasi secara eksplisit, tetapi penerus yang dihasilkan menggunakan instans yang awalnya diberikan.
interface Source { fun value(): Int }
class Const(val n: Int) : Source { override fun value() = n }
class Wrapper(s: Source) : Source by s
fun main() {
val w = Wrapper(Const(42))
println(w.value())
}Mengapa Menggunakan Kata Kunci by
Kata kunci by memungkinkan Anda:
- Menggunakan kembali implementasi yang sudah ada
- Menambahkan perilaku tanpa pewarisan
- Menghindari hierarki pewarisan yang rapuh
Inilah dukungan kelas satu Kotlin untuk prinsip mendahulukan komposisi daripada pewarisan.
Fondasinya
Kata kunci by ini menjadi fondasi semua hal dalam kursus ini. Berikutnya, kita akan melihat lebih dekat delegasi kepada objek anggota untuk menyusun perilaku.
Pemeriksaan Singkat
Uji pemahaman Anda tentang kata kunci by.
Rangkuman
Anda telah mempelajari delegasi kelas dengan by:
- Mendelegasikan antarmuka kepada objek lain
- Metode penerusan yang dibuat otomatis
- Menimpa anggota tertentu sambil meneruskan anggota lainnya
- Juga berfungsi dengan antarmuka bawaan
Berikutnya: mendelegasikan kepada anggota untuk menyusun perilaku.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kata Kunci by” gratis?
Ya — teks lengkap “Kata Kunci by” 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 “Kata Kunci by”?
Delegasikan implementasi interface 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 1 dari 4.
Berapa lama pelajaran “Kata Kunci by” 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.