Nesne Bildirimleri
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 57.
object Name { ... } bir sınıfı ve onun tek örneğini tek adımda tanımlar. Nesneyi adıyla kullanırsın; çağırman gereken bir kurucu yoktur:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}main içinde:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Çıktı:
v1.4, light theme
v1.4, dark themeYalnızca bir örnek vardır; bu nedenle nesneyi kullanan programın her bölümü aynı durumu okur ve değiştirir. Nesne ilk kullanıldığında oluşturulur; aşağıdaki init bloğu bunu gösterir:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }main içinde:
println("start")
home()
about()
println(Visits.count)Çıktı:
start
Visits created
3Bir nesnenin kurucusu yoktur, çünkü onu kimse oluşturmaz. Özelliklerinin değerleri, bildirimlerinde veya init içinde atanır. Bunun dışında normal bir sınıf gövdesidir: özel durum, özel yardımcılar ve herkese açık metotlar:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}main içinde:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Çıktı:
user-001
order-002Bir programda tam olarak bir tane bulunan şeyler için bir nesne kullanın: bir kayıt defteri, yapılandırma veya yardımcı işlevlerden oluşan bir grup. Bir nesne, herhangi bir dosyanın değiştirebileceği global bir durumdur; bu yüzden setter’larını private tutun ve her değişikliği yöntemlerinin denetlemesini sağlayın.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // adı üzerinden çağrıldı
// val u = Units() // hata: bir object'ın constructor'ı yokturGörev
KolayLeaderboard nesnesini tamamla. Her oyuncunun puanlarını özel bir eşlemede tutar. add(player, points) puan ekler, top() lideri ada 6 olarak döndürür (puanlar eşitse alfabetik olarak önce gelen isim döndürülür) veya kimsenin puanı yoksa empty döndürür, reset() herkesi kaldırır ve players özelliği oyuncu sayısını verir.
Functions.kt içindeki yardımcı recordWin ve recordDraw fonksiyonları sağlanmıştır: başka bir dosyadaki Leaderboard nesnesini kullanırlar. Sağlanan kod win ada, draw ada bo, top veya reset komutlarını okur, her top komutu için top() sonucunu ve son olarak sayı ile birlikte players: ifadesini yazdırır.
Kodun Leaderboard.kt ve Functions.kt dosyalarına yazılır. Main.kt sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
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}")
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Nesneler ve Eşlikçiler
Nesne BildirimleriEşlikçi Nesnelerconst ile SabitlerNesne İfadeleriTekrar - Bilet GişesiKendi başına pratik yap: Kotlin playground