by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış
Tembel başlatma kiplerini keşfedin: SYNCHRONIZED, PUBLICATION ve NONE.
by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
by lazy Nedir?
by lazy, bir val değerinin başlatılmasını ilk erişime kadar erteler. Lambda bir kez çalışır ve sonucu önbelleğe alır.
val greeting: String by lazy {
println("Computing...")
"Hello, Kotlin!"
}
fun main() {
println(greeting) // prints Computing... then Hello, Kotlin!
println(greeting) // prints Hello, Kotlin! (cached)
}lazy Sözdizimi
by lazy temsilcisi, özellik bildiriminden çıkarılan değer türünü döndüren bir lambda alır.
val pi: Double by lazy { Math.PI }
val appName: String by lazy { "MyApp v1.0" }
fun main() {
println(pi) // 3.141592653589793
println(appName) // MyApp v1.0
}SYNCHRONIZED Modu (Varsayılan)
Varsayılan olarak lazy, LazyThreadSafetyMode.SYNCHRONIZED kullanır: değeri yalnızca bir iş parçacığı başlatır.
val heavyResource: String by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
Thread.sleep(100) // simulate work
"Resource ready"
}
fun main() { println(heavyResource) }PUBLICATION Modu
PUBLICATION, birden çok iş parçacığının eşzamanlı olarak başlatmasına izin verir; ilk sonuç kazanır. Başlatma ucuz ve yan etkisiz olduğunda kullanın.
val config: Map<String, String> by lazy(LazyThreadSafetyMode.PUBLICATION) {
mapOf("host" to "localhost", "port" to "8080")
}
fun main() { println(config["host"]) }NONE Modu
NONE, iş parçacığı eşzamanlama yükü oluşturmaz. Yalnızca performansın önemli olduğu tek iş parçacıklı bağlamlarda kullanın.
val singleThreadValue: Int by lazy(LazyThreadSafetyMode.NONE) {
42
}
fun main() { println(singleThreadValue) }Bir Sınıfta lazy
Bir sınıf içindeki by lazy, ilk özellik erişiminde başlatılır; örnek durumuyla ilişkili pahalı hesaplamalar için kullanışlıdır.
class DatabaseConnection(val url: String) {
val pool: String by lazy {
println("Connecting to $url")
"Pool@$url"
}
}
fun main() {
val db = DatabaseConnection("localhost:5432")
println(db.pool)
}lazy ve lateinit
Karmaşık başlatmaya sahip val için by lazy kullanın. Harici olarak atanan var için (örneğin testlerde veya bağımlılık enjeksiyonunda) lateinit kullanın.
class MyService {
val computed: List<Int> by lazy { (1..100).toList() }
lateinit var injected: String
}
fun main() {
val s = MyService()
s.injected = "injected value"
println(s.computed.size)
println(s.injected)
}isInitialized Denetimi
Bir lazy özelliğinin başlatılıp başlatılmadığını .isInitialized() ile denetleyin; ancak bunu yalnızca temsilci başvurusu aracılığıyla yapabilirsiniz.
val myLazy: String by lazy { "initialized" }
fun main() {
val ref = ::myLazy
// No direct isInitialized on val lazy, but we can check via delegate
println(myLazy)
}Bağımlılıkla lazy
Lazy özellikler başka lazy özelliklere başvurabilir ve tembel bir başlatma zinciri oluşturabilir.
val baseUrl: String by lazy { "https://api.example.com" }
val usersUrl: String by lazy { "$baseUrl/users" }
val postsUrl: String by lazy { "$baseUrl/posts" }
fun main() {
println(usersUrl)
println(postsUrl)
}Uygulamalı Örnek: Tekil Hizmet
Ağır tekil nesneleri gerektiğinde başlatmak için object bildirimlerinde by lazy kullanın.
object Analytics {
val client: String by lazy {
println("Initializing analytics client")
"AnalyticsClient@ready"
}
}
fun main() {
println("App started")
println(Analytics.client) // initialized on first use
println(Analytics.client) // cached
}Tembel Düzenli İfade Derleme
Düzenli ifade derlemek pahalıdır. Bir kez derleyip yeniden kullanmak ve tekrarlanan yükü önlemek için by lazy kullanın.
val emailRegex: Regex by lazy {
Regex("^[A-Za-z0-9+_.-]+@(.+)$")
}
fun isValidEmail(email: String) = emailRegex.matches(email)
fun main() {
println(isValidEmail("user@example.com")) // true
println(isValidEmail("bad-email")) // false
}Hızlı Kontrol
En yüksek performans için tek iş parçacıklı bir ortamda hangi lazy modunu kullanmalısınız?
Özet
by lazy, ilk erişimde lambda'sını bir kez çalıştırır ve sonucu önbelleğe alır. İş parçacığı güvenliği için SYNCHRONIZED (varsayılanı), eşzamanlı ve yinelemeli olmayan başlatma için PUBLICATION, tek iş parçacıklı performans içinse NONE seçin.
Sıkça Sorulan Sorular
“by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış” dersi ücretsiz mi?
Evet — “by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış” dersinde ne öğreneceğim?
Tembel başlatma kiplerini keşfedin: SYNCHRONIZED, PUBLICATION ve NONE. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış
- observable ve vetoable Temsilcileri
- Özel ReadWriteProperty Temsilcisi Yazma
- Tercihler, Map Destekli Özellikler ve Günlükleme için Temsilciler