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 (withgibi), 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.