CodeBlanks Logo Icon CodeBlanks

Özet - Sınıflar

primary/secondary constructor ve companion object'i birleştirerek bir Point sınıfı yazarsın.

Özet - Sınıflar

Bu grupta primary ve secondary constructor, val/var özellikler, lateinit, by lazy ve companion object kavramlarını öğrendin. Bunlar Kotlin'de sınıf tanımının temel taşlarıdır.

Şimdi tümünü birleştireceksin: primary constructor ile başlatılan, secondary constructor ile alternatif açılan, companion object ile factory sunan bir sınıf yazacaksın. Bu yapı, gerçek dünya modellerinin temelidir; ileride miras ve arayüzler bu sınıfların üzerine eklenecek.

Uygulama Point sınıfını birleştir

Point adında bir sınıf tanımla. Primary constructor val x: Int, val y: Int alsın. Bir secondary constructor ekle: tek value: Int alsın ve this(value, value) ile köprü kursun. Bir companion object ekle; içinde fun origin() = Point(0, 0) factory metodu olsun. main içinde Point(5) ve Point.origin() ile iki örnek oluştur ve her birinin x ve y değerlerini yazdır.

Başlangıç kodu

Main.kt
// Point sınıfı tanımı
// primary: val x: Int, val y: Int
// secondary: value: Int, this(value, value)
// companion object içinde origin factory metodu
// main'de iki örnek oluştur, koordinatları yazdır

Örnek çözüm

Main.kt
class Point(val x: Int, val y: Int) {
    constructor(value: Int) : this(value, value)

    companion object {
        fun origin() = Point(0, 0)
    }
}

fun main() {
    val p = Point(5)
    val o = Point.origin()
    println("p: ${p.x}, ${p.y}")
    println("o: ${o.x}, ${o.y}")
}

Beklenen çıktı

p: 5, 5
o: 0, 0

Sırada ne var?

Sınıf yapısını öğrendin. Sonraki gruplarda kalıtım ile sınıflar arasında kod paylaşmayı, abstract sınıflar ile sözleşme tanımlamayı ve interface ile ortak davranış belirlemeyi göreceksin.

Bu grup; primary/secondary constructor, val/var özellikler, lateinit, by lazy ve companion object kavramlarını birleştirdi. Bunlar Kotlin nesne yönelimli programlamanın çekirdeğidir. Bir sonraki adımda open ile miras alınabilir sınıfları, override ile metot yeniden tanımlamayı keşfedeceksin.

Uygulama Rectangle sınıfını tanımla

Rectangle adında bir sınıf tanımla. Primary constructor val w: Int, val h: Int alsın. Bir init bloğu ekle; içinde println("Dikdörtgen oluşturuldu: $w x $h") yaz. fun area() = w * h metodu ekle. companion object içinde fun square(side: Int) = Rectangle(side, side) factory metodu olsun. main içinde Rectangle.square(4) ile örnek oluştur ve area() sonucunu yazdır.

Başlangıç kodu

Main.kt
// Rectangle sınıfı tanımı
// primary: val w: Int, val h: Int
// init bloğunda yazdır
// alan hesaplayan metot ekle
// companion object içinde square factory
// main'de square ile örnekle, alanı yazdır

Örnek çözüm

Main.kt
class Rectangle(val w: Int, val h: Int) {
    init {
        println("Dikdörtgen oluşturuldu: $w x $h")
    }

    fun area() = w * h

    companion object {
        fun square(side: Int) = Rectangle(side, side)
    }
}

fun main() {
    val s = Rectangle.square(4)
    println(s.area())
}

Beklenen çıktı

Dikdörtgen oluşturuldu: 4 x 4
16

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Point.origin() çağrısı, origin metodunun nerede tanımlı olduğunu gösterir. Nerededir?

  • Örnek üzerinde
  • init bloğunda
  • Companion object içinde Doğru cevap
  • Extension olarak

Açıklama: Companion object içindeki metotlar sınıf adıyla çağrılır.

2 Factory metot çağrısını tamamla

Soru
val p = Point.____()
println(p.x)
Cevap
val p = Point.create()
println(p.x)

Açıklama: Companion object içindeki factory metot sınıf adıyla çağrılır.

Orta seviye bölümündeki tüm dersler