Menu
Coddy logo textTech

Özel Setter'lar

Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 9 / 57.

Çoğu zaman kod dışındaki kod, bir özelliği okumalı ancak onu değiştirmemelidir. private set, getter'ı herkese açık tutar ve yalnızca setter'ı private yapar:

class Counter {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

main içinde:

val c = Counter()
c.increment()
println(c.count)
// c.count = 99   // hata: setter private

Çıktı:

1

Bu, yalnızca geçerli ödüller aracılığıyla artan bir puan gibi, yalnızca bir kural yoluyla değişebilen değerlere uygundur:

class Player(val name: String) {
    var score = 0
        private set
    private val _history = mutableListOf<Int>()
    val history: List<Int> get() = _history

    fun award(points: Int) {
        if (points <= 0) return
        score += points
        _history.add(points)
    }
}

main içinde:

val p = Player("Ada")
p.award(10)
p.award(-5)
p.award(3)
println(p.score)
println(p.history)

Çıktı:

13
[10, 3]

Yukarıdaki history, yaygın bir kalıbı gösterir: sınıf içinde özel bir MutableList bulunur ve salt okunur bir List olarak dışa sunulur. Çağıranlar öğeleri okuyabilir, ancak öğeleri değiştirmek için add veya remove kullanamaz:

private val _items = mutableListOf<String>()
val items: List<String> get() = _items      // salt okunur görünüm
// dışarıda: items.add("x")                  // hata: List'in add'i yok

Bir val, sınıfın içinde bile oluşturulduktan sonra asla değişmez. private set içeren var ise yalnızca sınıfın içinde değiştirilebilir kalır. Nesnenin tüm ömrü boyunca sabit kalan değerler için val seçin:

class Order(val id: Int) {            // asla değişmez
    var status = "new"
        private set                       // değişir, ama yalnızca Order içinde
    fun ship() { status = "shipped" }
}
challenge icon

Görev

Kolay

Elevator(val topFloor: Int) sınıfını tamamla. floor ve trips dışarıdan okunabilir, ancak yalnızca sınıfın içinde değiştirilebilir (private set). goTo(target), 0 ile topFloor arasındaki katlar arasında hareket eder: farklı bir kata yapılan geçerli bir hareket floor değerini günceller, trips değerine 1 ekler ve true döndürür; geçersiz veya aynı kata yapılan bir hareket ise false döndürür.

Verilen kod, en üst katı ve ardından hedef katları okur. Bir hareketten sonra floor 3 yazdırır veya hareket reddedildiğinde stay 3 yazdırır ve son olarak sayaçla birlikte trips: yazdırır.

Kodun Elevator.kt dosyasına yazılmalıdır. Main.kt verilen giriş/çıkış kodunu içerir ve düzenlenemez.

REQUIRED OUTPUT FORMAT: [Your translated content here]

Kendin dene

fun main() {
    // Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
    val input = generateSequence(::readLine).toList()
    val lift = Elevator(input[0].toInt())
    for (line in input.drop(1)) {
        val moved = lift.goTo(line.toInt())
        println("${if (moved) "floor" else "stay"} ${lift.floor}")
    }
    println("trips: ${lift.trips}")
}
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