Özet - Sınıflar
- Kotlin kursu
- Orta seviye
- Ders 6/116
- 5 dk
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
// 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
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
// 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
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
val p = Point.____()
println(p.x)
val p = Point.create()
println(p.x)
Açıklama: Companion object içindeki factory metot sınıf adıyla çağrılır.