By Lazy🎉

Sümeyra Özuğur🍂
2 min readDec 5, 2022

Nesnelerin oluşturulması sistemler için pahalı bir süreçtir. Bir nesne oluşturulduktan sonra,o sınıfın bütün property leri oluşturulur, heleki o property diğer bir objeye bağlı ise o sınıfın propertyleri derken süre uzarda uzar. Genel olarak, bellek alanı ne kadar doluysa, işlemin tamamlanma süresi o kadar uzar.

Peki, obje yaratılır yaratılmaz bu kadar işleme gerek var mı? Ya nesne yaratılır yaratılmaz değil de sadece çağrıldığında yaratılsa ve sonra dediğimiz özellik hafızada tutulsa çağırdığımız yerlerde yeniden yaratmak yerine hafıza tuttuğu değeri dönse?

İşte by lazy. Daha iyi anlamak için küçük bir örnek üzerinden gidelim.

val message by lazy{
say("Hello")
"Hi"
}

fun say(s: String) {
println(s)
}

fun main(){
println(message)
println(message)
println(message)
}
//Output
Hello
Hi
Hi
Hi

Peki burada tam olarak neler oluyor? Heyecana gerek yok! Hemen anlatıyorum.

Blokta, onu çağırarak erişilebilen bir “mesaj” değişkeni vardır. Outputu (”Merhaba” ve “Hi”) bu şekilde ekranda görüntülenir. İkinci ve üçüncü “message” değeri yazıldığında bu blok çalışmaz. Çünkü bu daha önce çalıştı ve “message” değerimiz “Hi” olarak atanmıştı. Bundan sonra, çalışan her “mesajda” sadece bunun değeri görünecektir. Yani, blok artık çalışmıyor, değeri hafızadan alıyoruz.

Lazy kısmını bitirdik. Umarım buraya kadar her şey nettir. Son olarak, lateinit ve lazy arasındaki farklardan bahsedelim.

Lazy vs Lateinit

✅ Lazy “val” anahtar kelimesi ile, lateinit ise “var” anahtar kelimesi ile kullanılır.

✅ Lazy bir fonksiyonun içindeki fonksiyonları çağırabilirken, lateinit çağıramaz.

✅ Lateinit primitivlerle kullanılamazken, lazy kullanabilir.

✅ Lateinit null yapılamazken, lazy null ile kullanılabilir.

✅ Lazy ilk çağrılacağı zaman oluşturulur. Sonra hafızadaki değeri kullanır. Lateinit başlatıldıktan sonra oluşturulur.

⭐Bill Gates’ in de dediği gibi lazy önemli. Kendinize iyi bakın bir sonraki yazıda görüşmek üzere.

Dipnot: Bir arkadaşımın önerisi ile İngilizce olan bu içeriğimi Türkçe’ye çevirdim. İngilizce içeriğim için yeni bir medium hesabı açtım. Göz atmak isterseniz tıklayabilirsiniz. Bu içerikte biraz daha detaya girdim, buda bize torpilim olsun😉.

--

--