Özet - Object bildirimi
- Kotlin kursu
- Orta seviye
- Ders 35/116
- 5 dk
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
// 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
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
// Formatter arabirimi tanımı
// main'de anonim nesne ile uygula
// format çağrısı ve yazdırÖrnek çözüm
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
class App {
____ object {
fun create(): App = App()
}
fun start(): String = Logger.log("başlatıldı")
}
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.