Sobes.tech
Junior

Kotlin'de 'scope fonksiyonları' nedir ve ne zaman kullanılmalıdır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kapsam fonksiyonları, bir nesne bağlamında kod bloğu çalıştırmaya olanak tanır. Temel fonksiyonlar: let, run, with, apply, also. Her biri, alıcı (invoker, receiver) ve döndürülmesi gereken değer açısından kendi özelliklerine sahiptir.

Fonksiyon Alıcı Döndürülmüş değer
let it Blok içindeki son ifadenin sonucu
run this Blok içindeki son ifadenin sonucu
with this (genişletme yöntemi olarak değil) Blok içindeki son ifadenin sonucu
apply this Ayarlanan nesne kendisi
also it Ayarlanan nesne kendisi

Kullanım:

  • let: Null olabilen nesne üzerinde işlem yapmak veya daha kısa isimli yerel değişken tanımlamak için.
// Örnek: nullable nesne üzerinde güvenli metod çağrısı
val str: String? = "Hello"
str?.let {
    println(it.length) // Sadece str null değilse çalışır
}
  • run: Nesne bağlamında kod bloğu çalıştırmak (with gibi), ancak genişletme yöntemi olarak veya nesne bağlamında değer hesaplamak için.
// Örnek: nesne yapılandırması ve sonuç alma
val configurations = buildList {
    add("Config 1")
    add("Config 2")
}.run {
    println("Yapılandırmalar uygulanıyor...")
    joinToString(", ") // List<String> bağlamında çalışır, String döner
}
println(configurations)
  • with: Bir nesnenin metod çağrılarını, her çağrı önünde nokta kullanmadan gruplamak için. Genişletme yöntemi değildir.
// Örnek: aynı nesnenin metod çağrılarını gruplama
val person = Person("Alice", 30)
with(person) {
    println(name) // Özelliklere doğrudan erişim
    println(age)
}
  • apply: Nesne yapılandırmak için. Kendisi döner. Nesne oluşturma ve yapılandırmayı tek ifadede yapmak için uygundur.
// Örnek: nesne oluşturma ve yapılandırma
val button = Button().apply {
    text = "Click Me"
    onClick = { println("Butona tıklandı") }
}
  • also: Nesne üzerinde ek işlemler yapmak (örneğin loglama) ve ardından nesneyi döndürmek için.
// Örnek: işlem sonrası loglama
val number = 42
val squared = number.also {
    println("İşlenen sayı: $it") // it üzerinde çalışır, number döner
}.run {
    this * this // kare hesaplar
}
println("Kare değeri: $squared")

Uygun kapsam fonksiyonunun seçimi, nesne ile ne yapılmak istendiğine ve hangi değerin döndürülmek istendiğine bağlıdır.