CodeBlanks Logo Icon CodeBlanks

lateinit

lateinit var ile gecikmiş başlatma öğrenirsin.

lateinit: geç başlatılan değişken

Bazen bir değişkeni tanımlarken değil, daha sonra (örneğin kurulum sırasında) başlatmak istersin. lateinit var bunu sağlar: değişkeni sonradan başlatılana kadar tanımlar.

class Person {
    lateinit var name: String
}
val p = Person()
p.name = "Ayşe"   // şimdi başlatıldı
println(p.name)

lateinit yalnızca var ile, non-null türlerle ve sınıf özelliği olarak kullanılabilir. İlkel türler (Int, Double vb.) ve val desteklenmez.

lateinit sınırları ve isInitialized

lateinit değişkeni başlatılmadan okunursa UninitializedPropertyAccessException fırlatır. Başlatılıp başlatılmadığını ::name.isInitialized ile denetleyebilirsin.

class Person { lateinit var name: String }
val p = Person()
if (p::name.isInitialized) {
    println(p.name)
} else {
    println("henüz yok")
}

Bu denetim özellikle test ya da yinelemeli kurulum senaryolarında, değişkenin daha önce başlatılıp başlatılmadığından emin olamadığında yararlıdır.

Uygulama lateinit Person sınıfı ile başlat ve yazdır

Bir class Person tanımla; içinde lateinit var name: String olsun. main içinde bir Person oluştur, p.name = "Ayşe" ile başlat ve println(p.name) ile yazdır.

Başlangıç kodu

Main.kt
class Person {
    // lateinit ile String bir name alanı tanımla
}

fun main() {
    val p = Person()
    // name alanını bir isimle başlat ve yazdır
}

Örnek çözüm

Main.kt
class Person {
    lateinit var name: String
}

fun main() {
    val p = Person()
    p.name = "Ayşe"
    println(p.name)
}

Beklenen çıktı

Ayşe

Soru ve cevaplar

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

1 Boşluğu doldur: lateinit

Soru
____ var name: String
Cevap
lateinit var name: String

Açıklama: lateinit var name: String sonradan başlatılır.

2 lateinit hangi türlerle kullanılamaz?

  • Int, Double gibi ilkel türler Doğru cevap
  • String
  • List
  • MutableList

Açıklama: lateinit yalnızca non-null referans türlerle çalışır; Int gibi ilkel türleri desteklemez.

3 İfadeyi rolüyle eşleştir

Kavram Anlamı
lateinit var Geç başlatılan değişken
var Değiştirilebilir (var)
::name.isInitialized Başlatıldı mı? Boolean
String (lateinit) Nullable değil

Başlangıç bölümündeki tüm dersler