Scope functions və extension functions
Scope functions (let, run, with, apply, also) obyekt üzərində müvəqqəti scope açır. Hamısı eyni işi görmür — iki oxla fərqlənirlər: obyektə necə müraciət olunur (it yoxsa this) və nə qaytarılır (lambda nəticəsi yoxsa obyektin özü).
Extension functions mövcud class-a onun kodunu dəyişmədən funksiya "əlavə edir": fun String.toMasked(): String. Əslində static utility funksiyadır — statik dispatch olunur, real üzv deyil və private sahələrə çıxışı yoxdur.
| Funksiya | Obyekt | Qaytarır | Tipik istifadə |
|---|---|---|---|
| `let` | `it` | Lambda nəticəsi | Null yoxlaması: `x?.let { ... }` |
| `run` | `this` | Lambda nəticəsi | Obyekt üzərində hesablama |
| `with` | `this` | Lambda nəticəsi | Bir obyektlə çoxlu əməliyyat |
| `apply` | `this` | Obyektin özü | Obyekt konfiqurasiyası (builder üslubu) |
| `also` | `it` | Obyektin özü | Yan təsir: log, validasiya |
Praktik qayda: konfiqurasiya üçün apply, null-safe transformasiya üçün let, yan təsir (log) üçün also. Scope function-ları iç-içə yazmaqdan qaçın — it-lərin hansı obyektə aid olduğu itir və müsahibədə bunu antipattern kimi qeyd etmək müsbət baldır.
🛠 Tapşırıq
Öz kodundan (və ya nümunə kimi) 3 parça götürüb scope function-larla təmizlə:
- Obyekt konfiqurasiyası olan bir yeri
applyilə, - null yoxlaması olan bir yeri
?.letilə, - log/analytics çağırışı olan bir yeri
alsoilə yaz.
Sonra bir String.maskPan() extension funksiyası yaz və "4169111122223333" üzərində yoxla.
Bitdi sayılır: hər dəyişikliyin yanında "niyə məhz bu funksiya" qeydi varsa.
📚 Mənbələr və sənədlər
- Scope functions — Kotlin sənədlərirəsmikotlinlang.org
- Extensions — Kotlin sənədlərirəsmikotlinlang.org