Sobes.tech
Junior

Kotlin-də 'sahə funksiyaları' nədir və nə vaxt istifadə edilməlidir?

sobes.tech Süni İntellekt

AI-dan cavab

Scope funksiyaları obyektin kontekstində kod bloku icra etməyə imkan verir. Əsas funksiyalar: let, run, with, apply, also. Hər biri alıcı (invoker, receiver) və qaytarılan dəyər baxımından öz xüsusiyyətlərinə malikdir.

Funksiya Alıcı Qaytarılan dəyər
let it Blokdakı son ifadənin nəticəsi
run this Blokdakı son ifadənin nəticəsi
with this (genişləndirmə metodu kimi deyil) Blokdakı son ifadənin nəticəsi
apply this Tənzimlənmiş obyekt özü
also it Tənzimlənmiş obyekt özü

İstifadə:

  • let: Null ola bilən obyekt üzərində əməliyyatlar aparmaq və ya daha qısa adlı lokal dəyişən daxil etmək üçün.
// Nümunə: nullable obyekt üzərində təhlükəsiz metod çağırışı
val str: String? = "Hello"
str?.let {
    println(it.length) // Yalnız str null deyilsə işləyəcək
}
  • run: Obyektin kontekstində kod bloku icra etmək (with kimi), lakin genişləndirmə metodu kimi və ya obyektin kontekstində dəyər hesablamaq üçün.
// Nümunə: obyektin tənzimlənməsi və nəticənin alınması
val configurations = buildList {
    add("Config 1")
    add("Config 2")
}.run {
    println("Konfiqurasiyalar tətbiq olunur...")
    joinToString(", ") // List<String> kontekstində icra olunur, String qaytarır
}
println(configurations)
  • with: Bir obyektin metod çağırışlarını qruplaşdırmaq üçün, hər çağırışdan əvvəl "nöqtə" istifadə etmədən. Bu genişləndirmə metodu deyil.
// Nümunə: eyni obyektin metod çağırışlarının qruplaşdırılması
val person = Person("Alice", 30)
with(person) {
    println(name) // Birbaşa xassələrə giriş
    println(age)
}
  • apply: Obyekti tənzimləmək üçün. Özünü qaytarır. Objekti yaratmaq və tənzimləmək üçün əlverişlidir.
// Nümunə: obyektin yaradılması və tənzimlənməsi
val button = Button().apply {
    text = "Click Me"
    onClick = { println("Düyməyə basıldı") }
}
  • also: Obiekt üzərində əlavə əməliyyatlar aparmaq, məsələn, loglama, və ya başqa əməliyyatlar sonrası. Özünü qaytarır.
// Nümunə: əməliyyatdan sonra loglama
val number = 42
val squared = number.also {
    println("Rəqəmin işlənməsi: $it") // it üzərində işləyir (number), number qaytarır
}.run {
    this * this // Bu üzərində işləyir (number), kvadratını qaytarır
}
println("Kvadrat dəyəri: $squared")

Uyğun scope funksiyasını seçmək, obyektlə nə etmək istədiyinizə və hansı dəyərin qaytarılmasına bağlıdır.