Nesne Bildirimleri
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 57.
object Name { ... } tek adımda bir sınıfı ve onun tek örneğini bildirir. Nesneyi adıyla kullanırsın; çağrılacak 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
3object oluşturucusuna sahip değildir, çünkü onu hiç kimse oluşturmaz. Özellikleri değerlerini bildirimlerinde veya init içinde alır. Bunun dışında normal bir sınıf gövdesidir: private durum, private yardımcılar ve public 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 bir şey için nesne kullanın: bir kayıt defteri, yapılandırma veya yardımcı işlevler grubu. Nesne, herhangi bir dosyanın değiştirebileceği global durumdur; bu nedenle setter'larını gizli tutun ve yöntemlerinin her değişikliği kontrol etmesini sağlayın.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // ad üzerinden çağrılır
// val u = Units() // hata: bir object'in 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 ad) veya hiç kimsenin puanı olmadığında empty döndürür, reset() herkesi kaldırır ve players özelliği oyuncu sayısını belirtir.
Functions.kt içindeki recordWin ve recordDraw yardımcı işlevleri sağlanmıştır: başka bir dosyadaki Leaderboard'ı kullanırlar. Sağlanan kod win ada, draw ada bo, top veya reset komutlarını okur, her top için top() çıktısını yazdırır ve son olarak sayı ile birlikte players: yazdırır.
Kodun Leaderboard.kt ve Functions.kt dosyalarına yazılmalıdır. Main.kt sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı 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