lateinit
- Kotlin kursu
- Başlangıç
- Ders 81/116
- 5 dk
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
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
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
____ var name: String
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 |