Sobes.tech
Junior

Kotlin'de hangi kapsam fonksiyonlarını biliyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

  • let: Bir nesne üzerinde kod bloğu çalıştırır ve son ifadenin sonucunu döndürür. Null olabilen nesnelerde güvenli çağrılar yapmak için sıkça kullanılır.
  • run: İki varyantı vardır:
    • Uzantı fonksiyonu olarak: Nesne (this) üzerinde kod bloğu çalıştırır ve son ifadenin sonucunu döndürür.
    • Bağımsız fonksiyon olarak: Bağlam olmadan kod bloğu çalıştırır ve son ifadenin sonucunu döndürür.
  • with: Bir nesne üzerinde kod bloğu çalıştırır ve son ifadenin sonucunu döndürür.
  • apply: Bir nesne (this) üzerinde kod bloğu çalıştırır ve nesneyi kendisini döndürür. Özelliklerin yapılandırılmasında sıkça kullanılır.
  • also: Bir nesne (it) üzerinde kod bloğu çalıştırır ve nesneyi kendisini döndürür. Yan etkiler için kullanılır.
// let kullanım örneği
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // String uzunluğunu döndürür
} // length == 6

// run uzantı fonksiyonu olarak kullanım örneği
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// bağımsız run fonksiyonu olarak kullanım örneği
val result = run {
    // Receptor olmadan
    println("Bir blok çalıştırılıyor")
    1 + 2 // 3 döner
} // result == 3

// with kullanımı
val configuration = configureUsing {
    // this - configureUsing'e geçirilen nesne
    width = 100
    height = 200
}

fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
    val example = ScopeExample()
    example.builder()
    return example
}

class ScopeExample {
    var width: Int = 0
    var height: Int = 0
}

// apply kullanımı
val person = mutableListOf<String>().apply {
    // this == liste
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// also kullanımı
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == liste
    println("Liste işleniyor: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]