Deklarasi Object
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 12 dari 57.
object Name { ... } mendeklarasikan sebuah class dan satu-satunya instance-nya sekaligus. Kamu menggunakan object dengan namanya, tidak ada constructor yang perlu dipanggil:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}Di dalam main:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Output:
v1.4, light theme
v1.4, dark themeHanya ada satu instance, sehingga setiap bagian program yang menggunakan object tersebut membaca dan mengubah state yang sama. Object dibuat saat pertama kali digunakan, seperti yang ditunjukkan oleh blok init di bawah ini:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }Di dalam main:
println("start")
home()
about()
println(Visits.count)Output:
start
Visits created
3Sebuah object tidak memiliki konstruktor karena tidak ada yang membuatnya. Property-nya mendapatkan nilainya melalui deklarasi atau di init. Selain itu, isinya seperti isi class biasa: status privat, helper privat, dan method publik:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}Di dalam main:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Output:
user-001
order-002Gunakan object untuk sesuatu yang jumlahnya tepat satu dalam program: registry, konfigurasi, atau sekelompok fungsi pembantu. Object adalah status global yang dapat diubah oleh file mana pun, jadi jadikan setter-nya privat dan biarkan method-nya memeriksa setiap perubahan.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // dipanggil melalui namanya
// val u = Units() // error: object tidak memiliki konstruktorTantangan
MudahLengkapi object Leaderboard. Object ini menyimpan poin setiap pemain dalam map privat. add(player, points) menambahkan poin, top() mengembalikan pemain teratas sebagai ada 6 (jika poinnya sama, nama yang lebih dulu menurut urutan alfabet) atau empty jika tidak ada yang memiliki poin, reset() menghapus semua pemain, dan property players adalah jumlah pemain.
Fungsi pembantu recordWin dan recordDraw dalam Functions.kt sudah disediakan: fungsi-fungsi ini menggunakan Leaderboard dari file lain. Kode yang disediakan membaca perintah win ada, draw ada bo, top atau reset, mencetak top() untuk setiap top, lalu mencetak players: beserta jumlah pemain.
Tulis kodemu di Leaderboard.kt dan Functions.kt. Main.kt berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"win" -> recordWin(p[1])
"draw" -> recordDraw(p[1], p[2])
"reset" -> Leaderboard.reset()
else -> println(Leaderboard.top())
}
}
println("players: ${Leaderboard.players}")
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman Buku3Objek dan Companion Object
Deklarasi ObjectCompanion ObjectKonstanta dengan constEkspresi ObjectUlasan: Loket TiketLatihan sendiri: Playground Kotlin