CodeBlanks Logo Icon CodeBlanks

Özet - Object bildirimi

object, companion object ve object expression'ı birleştirerek bir yardımcı nesne yazarsın.

Özet - Object bildirimi

Bu grupta object, companion object ve object expression'ı öğrendin. object tek örnekli singleton tanımlar; companion object sınıfa bağlı singleton sağlar; object expression ise anonim uygulama yapar.

Bu özette hepsini birleştirip bir uygulama başlatıcı yazacaksın. object Logger ile günlükler, class App ile uygulama örneği ve companion object ile fabrika metodu kullanılır. App.create().start() çağrısı Logger üzerinden günlük basar. Tüm parçalar bir araya geldiğinde singleton, sınıf ve fabrika birlikte çalışır.

Uygulama Logger ve App birleştirme

Logger adında bir object tanımla; fun log(message: String): String metodu "[LOG] $message" döndürsün. App adında bir sınıf tanımla; companion object içinde fun create(): App = App() fabrika metodu olsun. App sınıfında fun start(): String metodu Logger.log("başlatıldı") döndürsün. main içinde println(App.create().start()) çağrısı yapsın.

Başlangıç kodu

Main.kt
// Logger nesnesi ve App sınıfı tanımı
// sınıf içi singleton bloğu ile create fabrika metodu
// start metodu Logger'ı çağırır
// main'de başlat ve sonucu yazdır

Örnek çözüm

Main.kt
object Logger {
    fun log(message: String): String = "[LOG] $message"
}

class App {
    companion object {
        fun create(): App = App()
    }
    fun start(): String = Logger.log("başlatıldı")
}

fun main() {
    println(App.create().start())
}

Beklenen çıktı

[LOG] başlatıldı

Uygulama object expression ile günlük biçimlendirici

Formatter adında bir arabirim tanımla; fun format(message: String): String metodu olsun. main içinde val f = object : Formatter { override fun format(message: String) = ">> $message" } anonim nesnesini oluştur. println(f.format("test")) ile sonucu yazdır.

Başlangıç kodu

Main.kt
// Formatter arabirimi tanımı
// main'de anonim nesne ile uygula
// format çağrısı ve yazdır

Örnek çözüm

Main.kt
interface Formatter {
    fun format(message: String): String
}

fun main() {
    val f = object : Formatter {
        override fun format(message: String) = ">> $message"
    }
    println(f.format("test"))
}

Beklenen çıktı

>> test

Soru ve cevaplar

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

1 Bir uygulamanın günlüklerini tutmak için hangi yapı uygundur?

  • Her seferinde yeni class
  • Local değişken
  • Soyut arabirim
  • object Logger (singleton) Doğru cevap

Açıklama: object Logger tek örnek ile tüm uygulama için günlük tutar.

2 companion + Logger çağrısını tamamla

Soru
class App {
    ____ object {
        fun create(): App = App()
    }
    fun start(): String = Logger.log("başlatıldı")
}
Cevap
class App {
    companion object {
        fun create(): App = App()
    }
    fun start(): String = Logger.log("başlatıldı")
}

Açıklama: companion object sınıf içi singleton tanımlar.

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