Kotlin
Ö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.
Örnek çözümü göster
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}")
}
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.
Örnek çözümü göster
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())
}
Kendini test et
-
Point.origin() çağrısı, origin metodunun nerede tanımlı olduğunu gösterir. Nerededir?
- Örnek üzerinde
- init bloğunda
- Companion object içinde
- Extension olarak
Cevabı göster
Companion object içinde — Companion object içindeki metotlar sınıf adıyla çağrılır.
-
Factory metot çağrısını tamamla
val p = Point.____()
println(p.x)
Cevabı göster
val p = Point.create()
println(p.x)
Sıradaki ders: open