Köhnə Android versiyalarında lambda ifadələrindən istifadə etdiyimiz zaman nə baş verir?
sobes.tech Süni İntellekt
AI-dan cavab
Köhnə Android versiyaları üçün (API 24-dən əvvəl) layihədə lambda ifadələri nə vaxt istifadə olunur və Kotlin və ya Java (Java 8 lambda sintaksisindən istifadə edərək) onları anonim siniflərə çevirməyi həyata keçirirmi? Bu proses avtomatikdir və desugaring (Java üçün) və ya Kotlin bytecode istehsalı kimi quruluş vasitələri ilə həyata keçirilir.
Desugaring, Java dilinin yeni imkanlarından, məsələn, lambdalar, interfeyslərdə default metodlar, try-with-resources və digər funksiyalardan istifadə etməyə imkan verir, bu imkanlar JVM səviyyəsində (Dalvik/ART) köhnə Android versiyalarında mövcud deyil. Quruluş vasitələri (məsələn, D8/R8) bu yeni dil imkanlarını istifadə edən mənbə kodundan yaradılan bytecode-u hədəf Android versiyasının icra mühitinə uyğun bytecode-ə çevirir.
Kotlin üçün, kompilyator da lambdaları uyğun bytecode nümayəndələrinə çevirir, çox vaxt anonim siniflərdən istifadə edir. Köhnə Android versiyaları üçün tərtib edilən bu bytecode də hədəf icra mühiti ilə uyğundur.
Nəticədə, yaranan bytecode köhnə Android versiyalarında işləyir, lakin əlavə sinflər (hər lambda üçün bir anonim sinif) içərə bilər, bu da APK ölçüsünü və icra vaxtını bir az artıra bilər (yeni obyektlərin yaradılması səbəbindən).
// Java-da lambda nümunəsi
Runnable r = () -> System.out.println("Salam!");
r.run();
Desugaring sonrası, bu təxminən aşağıdakı bytecode-ə çevrilə bilər, bu da ekvivalentdir:
// Desugaring üçün emulyasiya edilmiş nəticə
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Salam!");
}
};
r.run();
Kotlin üçün proses oxşardır, kompilyator da lambdaları ekvivalent formaya çevirir.
// Kotlin-də lambda nümunəsi
val action = { println("Salam!") }
action.invoke()
Bu kod da anonim siniflər və ya ekvivalent strukturlar istifadə edən bytecode-ə çevriləcək, hədəf Android versiyası ilə uyğun olacaq.
Əhəmiyyətli qeyd etmək lazımdır ki, müasir Android inkişaf mühitlərində (Android Studio, Gradle), desugaring standartdır və Kotlin və ya müəyyən Java versiyalarını istifadə edən layihələr üçün aktivdir. Bu, lambda və digər yeni dil xüsusiyyətlərinin istifadəsini tam şəffaf edir, köhnə Android versiyalarını dəstəkləmək üçün əlavə addımlar tələb olunmur.