Menu
CoddyTech

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 theme

Yalnı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
3

Bir 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-002

Bir 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'ı yoktur
challenge icon

Görev

Kolay

Leaderboard 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}")
}
quiz iconKendini test et

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

Kendi başına pratik yap: Kotlin playground