Sparround

Legacy refaktorinq: XML → Compose, Java → Kotlin

Miqrasiya agentin ən çox fayda verdiyi, eyni zamanda ən çox zərər verə biləcəyi sahədir. Fayda — mexaniki çevirmə həcmlidir və insan üçün darıxdırıcıdır. Zərər — səhv miqrasiya compile olur, amma davranışı dəyişdirir.

Rəsmi tövsiyə artımlı (incremental) miqrasiyadır: Compose və View sistemi bir müddət yan-yana yaşayır. İnterop API-ləri məhz bunun üçündür:

  • `ComposeView` — mövcud View əsaslı layout-a Composable əlavə etmək.
  • `AndroidView` — Compose ekranında View komponenti işlətmək.
  • `AndroidViewBinding` — mövcud view binding-i Compose-da işlətmək.
Miqrasiya addımıAgentə uyğundurmuSəbəb
Ardıcıllığın planlaşdırılmasıQismən — plan rejimində, insan təsdiqi iləBiznes prioritetləri agentə məlum deyil
Mövcud davranış üçün test yazmaqBəli — yüksək dəyərMexanikidir, nəticə yoxlanıla bilir
Bir ekranın çevrilməsiBəliDar sahə, test ilə qorunur
20 ekranın bir dəfəyə çevrilməsiXeyrReview imkansız olur, reqressiya səbəbi itir
Java → Kotlin avtomatik çevirməXeyr — IDE aləti bunu daha yaxşı edirAgentin dəyəri çevirmədən *sonrakı* təmizləmədədir
Çevirilmiş Kotlin kodunun idiomatikləşdirilməsiBəliNullability, data class, scope funksiyaları

Ən vacib qayda: miqrasiya ilə təkmilləşdirməni qarışdırmayın. Agent XML-i Compose-a çevirərkən "bu arada məntiqi də yaxşılaşdırım" meylindədir. Nəticədə PR-da nəyin çevirmə, nəyin dəyişiklik olduğu ayırd edilmir — reqressiya olsa səbəbi tapmaq çətinləşir. Tapşırıqda açıq yazın: "davranışı dəyişmə, yalnız çevir".

Java → Kotlin miqrasiyasında agentin real dəyəri avtomatik çevirmədə deyil — Android Studio-nun öz aləti onu yaxşı edir. Dəyər sonrakı addımdadır: çevirilmiş kod texniki olaraq Kotlin-dir, amma idiomatik deyil.

Tipik təmizləmə işləri:

  • Nullability — avtomatik çevirmə hər şeyi ?!! ilə doldurur. Real null-safety analizi lazımdır.
  • `data class` — getter/setter-li sinif data class-a çevrilə bilər.
  • Scope funksiyalarılet, apply, also ilə sadələşdirmə.
  • Kolleksiya əməliyyatları — döngələr map, filter, groupBy ilə əvəzlənə bilər.
  • `when` — uzun if-else zəncirləri.

Bunların hamısı davranışı dəyişmə riski daşıyır, ona görə test qorunması vacibdir.

📚 Mənbələr və sənədlər