16. Aug 2021Android

Prečo používame zarovnanie kódu v Android Studio

Pre náš GR Android tím je najdôležitejším aspektom programovania čitateľnosť. Chceme, aby bol náš kód čitateľný, pretože to ovplyvňuje všetky hlavné ciele našej spoločnosti. Ak je váš kód chaotický a ťažko zrozumiteľný, nemôžete vytvárať aplikácie, ktoré nie sú náchylné na chyby, ľahko sa udržiavajú, ľahko upravujú atď.

Pri vývoji Android aplikácií uprednostňujeme čitateľnosť pred jednoduchosťou písania. Existuje veľa vecí, ktoré ovplyvňujú čitateľnosť kódu, ako sú názvy premenných a funkcií, syntax jazyka, používanie čistých funkcií atď. Čitateľnosť je možné zvýšiť aj dobrým zarovnaním kódu, a to neznamená iba to, koľko tabulátorov alebo medzier použijete. Zarovnanie rovnakých častí kódu do stĺpcov vám pomôže zistiť, v čom je rozdiel, alebo vám to môže pomôcť ignorovať to, čo je rovnaké.

Napríklad, keď vytvárate dátové triedy s viacerými poľami. Je to čitateľnejšie, keď do jedného stĺpca vložíte názvy polí a do druhého dátové typy.

data class EmployeeDetail(
    val employee: Employee,
    val personalNumber: PersonalNumber,
    val hasCard: Boolean,
    val hasPin: Boolean,
    val fingerprints: List<Finger>
)


data class EmployeeDetail(
    val employee       : Employee,
    val personalNumber : PersonalNumber,
    val hasCard        : Boolean,
    val hasPin         : Boolean,
    val fingerprints   : List<Finger>
)

Alebo ak deklarujete funkciu s viacerými parametrami. Je jednoduchšie čítať názvy parametrov a ich dátové typy.

fun View.actionsPage(
    actions: List<Action>,
    grid: Grid,
    itemsPerPage: Int,
    position: Int,
    settings: Settings
) = whenAttached { }


fun View.actionsPage(
    actions      : List<Action>,
    grid         : Grid,
    itemsPerPage : Int,
    position     : Int,
    settings     : Settings
) = whenAttached { }


Ďalším príkladom je niečo opakujúce sa ako nastavovanie string values pre TextViews.

date.text = string(R.string.attendance_detail_header_date)
category.text = string(R.string.attendance_detail_header_category)
time.text = string(R.string.attendance_detail_header_time)
duration.text = string(R.string.attendance_detail_header_duration)
shift.text = string(R.string.attendance_detail_header_time)
arrival.text = string(R.string.attendance_detail_header_arrival)

Ak zarovnáte rovnaký kód do stĺpcov, môžete chybu ľahko vidieť (posunutie TextView je nastavené na nesprávny reťazec :)), pretože rovnaké časti môžete vizuálne ignorovať a zamerať sa na to, čo je dôležité.

date    .text = string(R.string.attendance_detail_header_date)
category.text = string(R.string.attendance_detail_header_category)
time    .text = string(R.string.attendance_detail_header_time)
duration.text = string(R.string.attendance_detail_header_duration)
shift   .text = string(R.string.attendance_detail_header_time)
arrival .text = string(R.string.attendance_detail_header_arrival)

Takéto zarovnanie kódu využívame často, a je to časovo náročné. Preto sme sa rozhodli vytvoriť doplnok pre Android Studio s názvom GoodFormatter.

Je obmedzený na 50 riadkov kódu, pretože je ťažké spracovať dlhé reťazce a zarovnať ich. Pracujeme na verzii 2.0, ktorá bude používať stromovú dátovú štruktúru PSI, a preto nám umožní optimalizovať proces zarovnania. Existujú však aj nevýhody. Aby sme to zhrnuli, pozrime sa na výhody a nevýhody.

Pros:

  • ľahšie čitateľný
  • kód vyzerá čistejšie
  • môže vám pomôcť vidieť niektoré chyby

Cons:

  • commits môžu obsahovať viac medzier (to je možné uľahčiť napríklad cez github skryť zmeny medzier)
  • Nie vždy to dáva zmysel, takže musíte viac premýšľať, kedy to použiť
  • pridanie riadka môže vyžadovať úpravu všetkých riadkov čo je časovo náročné (ale keď použijete náš doplnok, nemusí to byť tak :))
Peter BergmannAndroid Developer