0Pricing
Kotlin Academy · Ders

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

  1. by lazy: Ertelenmiş Başlatmaya Derinlemesine Bakış
  2. observable ve vetoable Temsilcileri
  3. Özel ReadWriteProperty Temsilcisi Yazma
  4. Tercihler, Map Destekli Özellikler ve Günlükleme için Temsilciler
← Kotlin Academy Sayfasına Dön