Čistý kód Java: ako ho dosiahnuť?

Prichádza obdobie jari, keď príroda obnovuje svoju krásu. My sa môžeme inšpirovať a popracovať zase na estetickej stránke našich zdrojových kódov. Práve teraz je vhodný čas začať s upratovaním a čistením kódu, pretože čistý kód nie je len trendy koncept, ale aj nevyhnutnosť pre kvalitu programu.

Čistý kód je v mnohom podobný starostlivosti o zuby. Ak sa o zdrojový kód nestaráme, zanedbávame architektúru a novú funkcionalitu tzv. „doliepavame“, postupom času začnú rásť zbytočné náklady a čas potrebný na jeho ozdravenie. Podobne je to aj so zubami. Baktérie (v IT svete programové bugy) milujú špinavé, zanedbané prostredie (programu).

Písanie čistého kódu už dávno nie je o osobnej preferencii, ale existuje množstvo odporúčaní a tipov osvedčených rokmi praxe, ktoré nám pomôžu takýto kód napísať. V našom článku sa pozrieme na sériu pravidiel a odporúčaní pre písanie čistého kódu v Java jazyku. Tieto zásady nám pomôžu vytvárať kód, ktorý nie je len funkčný, ale aj elegantný a ľahko pochopiteľný pre nás a pre ostatných vývojárov.

Nech náš kód kvitne rovnako nádherne, ako rozkvitá príroda na jar. Poďme na to!

Čo je čistý kód?

Čistý kód môžeme definovať ako kód, ktorý je pomerne jednoduchý na čítanie a pochopenie, zároveň sa ľahko upravuje a udržiava. Mal by byť dobre organizovaný a konzistentný v používaných pravidlách, neobsahuje chyby.

Vlastnosti čistého kódu

Pri písaní zdrojového kódu sa snažíme, aby mal nasledovné vlastnosti:

  1. Jednoduchosť – kód by mal byť čo najjednoduchší, aby sa dal ľahko pochopiť. Veľa zbytočných chýb v programe vzniká, ak programátor celkom nepochopí, čo daný kód robí.
  2. Udržateľnosť – kód by mal byť dlhodobo udržiavateľný, aby sa dal jednoducho upravovať a rozširovať o novú funkcionalitu. Na kóde môže pracovať mnoho rôznych vývojárov, preto je dôležité dbať o to, aby spolupracovali a dodržiavali dohodnuté pravidlá.
  3. Testovateľnosť – kód by mal pomerne jednoducho testovateľný, tým zároveň dosiahneme menšiu náchylnosť na chyby. Ideálne je zamerať sa na automatizované testovanie, aby bolo zaručené, že pri programovaní novej funkcionality, neporušíme tú existujúcu.

Čistý kód neobsahuje duplicitu kódu, je menej náchylný na chyby a je tiež jednoduchšie izolovať a opraviť problémy v kóde. Taktiež nie je potrebné písať toľko komentárov, ktoré vysvetľujú zložité miesta kódu.

Vlastnosti „špinavého“ kódu

Naopak, ak tvoj kód obsahuje niektoré z nasledovných vlastností, je vhodné pouvažovať, ako by sa dali odstrániť. Takzvaný „špinavý“ kód môže byť plne funkčný a v podstate kompilátoru je úplne jedno ako je kód napísaný, v budúcnosti však môžu nastať problémy, hlavne ak sa bude upravovať. K vlastnostiam špinavého kódu patria: chaos, zložitosť, ťažká čitateľnosť a pochopiteľnosť, problémy s rozšíriteľnosťou, náročné lokalizovať a opraviť chybu, duplicita, časová náročnosť.

Čistý kód Java

Štruktúra projektu

Prvým krokom k čistému kódu je vhodná zvolená štruktúra projektu, ktorá udáva spôsob organizácie zdrojových súborov, resources, konfigurácií, testov atď. Cieľom je vytvoriť takú intuitívnu štruktúru projektu, ktorá by skrátila čas vyhľadávania medzi súbormi.

Aj keď nás jazyk Java nenúti používať žiadnu konkrétnu štruktúru projektu, vždy je vhodné riadiť sa osvedčenými štandardami komunity. Maven, nástroj na automatizované buildovanie projektov, odporúča štandardizované rozloženie priečinkov v projekte podľa nasledovnej štruktúry:

src/main/java Zdroje súbory a knižnice
src/main/resources Iné zdroje ako napr. modely, …
src/test/java Zdrojové súbory testov
src/test/resources Iné zdroje pre testovanie

Súbory v tomto type štruktúry projektu sú primárne rozdelené na súbory pre aplikáciu a testy. Tie sa potom ďalej delia na zdrojové súbory a iné zdroje. Zdrojové kódy sa potom na nižšej úrovni organizujú do balíčkov (packages).

Správne pomenovanie

Jedným z najdôležitejších princípov čistého kódu je používanie jasných a zmysluplných názvov premenných, funkcií, tried a iných identifikátorov. Preto by sme im mali vždy dať názov, ktorý súvisí s ich funkcionalitou. Napr. už z názvu metódy by malo byť jasné, bez je podrobnejšieho preštudovania, čo daná metóda robí. To uľahčuje ostatným vývojárom pochopiť, čo tvoj kód robí. Rovnako premenné musia byť pomenované tak, aby z nich bolo okamžite zrejmé, čo sa do nich ukladá a aký to je dátový typ. Aj keď je určite pohodlnejšie skracovať názvy identifikátorov (napr. c miesto count, alebo calc miesto calculate) za účelom rýchlejšieho písania kódu, nakoniec tým v konečnom dôsledku aj tak utrpí čitateľnosť kódu. Čitateľnosť a zrozumiteľnosť kódu pomáha pri udržiavaní kódu z dlhodobého hľadiska.

Štruktúra zdrojového súboru

Súbor so zdrojovým kódom obsahuje množstvo rozličných elementov. Kompilátor v Jave necháva programátorom pomerne veľkú voľnosť, aby si zvolili poradie elementov, aké im vyhovuje a vyžaduje pridržiavanie sa iba základnej štruktúry zdrojového súboru. Rovnako ako pri štruktúre projektu sa zaužívalo viacero odporúčaní, ale typické usporiadanie elementov v zdrojovom kóde vyzerá nasledovne:

  • Package
  • Importy
    • všetky statické importy,
    • všetky nestaticky importy,
  • Trieda
    • premenné,
    • inštancie,
    • konštruktory,
    • metódy.
Prvým krokom k čistému kódu je vhodná zvolená štruktúra projektu
Prvým krokom k čistému kódu je vhodná zvolená štruktúra projektu.

Parametre metódy

Aj keď parametre metódy sú vo väčšine prípadov nevyhnutné, množstvo parametrov v metóde môže zhoršiť pochopiteľnosť a čitateľnosť kódu. Preto by sme sa mali snažiť optimalizovať počet parametrov v metóde tak, aby sme dosiahli istý kompromis. Väčšinou dobrá voľba je mať približne 3 parametre a ak je parametrov ďaleko viac, tak väčšinou je metóda dlhšia a komplikovanejšia. V takom prípade sa dajú parametre, ktoré spolu súvisia, zlúčiť do spoločného dátového objektu a ten použiť ako parameter metódy. Napr. objektový typ adresa môžeme použiť miesto parametrov (meno, priezvisko, ulica, mesto, štát, telefónne číslo).

V každom prípade je to potrebné posudzovať prípad o prípadu a nesnažiť sa vytvárať zbytočne nové dátové typy, aby sme navzájom pospájali navzájom nesúvisiace parametre. Snažíme sa zlepšiť čitateľnosť kódu, nie ho skomplikovať.

Neflexibilný kód

Natvrdo nadefinované hodnoty v programe (angl. hardcoding) spôsobujú, že zmena takých hodnôt, je pomerne zložitá, najmä ak sú tie isté hodnoty roztrúsené po celom programe. To často vedie aj ku chybám, ak to na niektorom mieste zabudneme zmeniť na novú hodnotu.
Preto sa snažíme, aby kód reagoval na zmeny dynamicky a to tak, že natvrdo definované hodnoty napr.:

  • nahradíme konštantou alebo enumeračnou triedou,
  • nahradíme hodnotou načítanou z konfiguračného súboru, alebo prostredia.

Komentáre v kóde

Čo sa týka komentárov tak tu treba byť opatrný a používať ich striedmo. Zmysluplné komentáre v kóde môžu byť prospešné na pochopenie netriviálnych aspektov programu, ale zároveň by nemali opisovať očividné časti kódu, pretože nafúknuté komentáre môžu zhoršiť čitateľnosť kódu. V zásade sa snažíme dodržiavať nasledujúce odporúčania:

  • Komentáre sú doplnok kódu, ich cieľom nie je vysvetliť zle napísaný, ťažko pochopiteľný kód.
  • Komentáre musia správne naformátované, aby boli čitateľné.
  • Odporúča sa používať JavaDoc komentáre, hlavne ak náš kód bude používať aj niekto iný.
  • Používame hlavne jednoriadkové komentáre. Blokové komentáre iba pre odôvodnenia riešenia v prípade netradičného rozhodnutia.

Logovanie kódu

Podobne ako pri komentároch, dôležitosť logovania kódu sa nedá spochybniť. Ak to však preženieme so zapisovaním údajov, tak to môže viesť k zníženiu výkonu programu a zneprehľadneniu kódu. Na logovanie správ v Jave môžeme využiť rôzne knižnice a frameworky. Spomeniem napr. Apache Log4J. Pri logovaní správ sa snažíme pridržiavať nasledovných rád:

  • Logovaciu správu musíme vytvoriť tak, aby bola veľmi jasná a opisná.
  • Ak kód bude bežať na produkcii, potrebujeme zvoliť vhodný level logovania.
  • Treba sa vyhnúť logovaniu všetkého, namiesto toho porozmýšľať, aká informácia nám môže naozaj pomôcť.

Nástroje

V ekosystéme Java je k dispozícii niekoľko nástrojov, ktoré pomáhajú pri písaní čistého kódu. Môžeme použiť nástroje na formátovanie kódu a analýzu kódu, ako sú SonarQube, SpotBugs, Veracode, Checkstyle, Codacy, FindBugs, Coverity, PMD atď.

Väčšina populárnych editorov kódu Java, ako napr. Eclipse a IntelliJ, umožňuje automatické formátovanie kódu. Predvolené pravidlá formátovania si ľahko vieme prispôsobiť alebo nahradiť vlastnými pravidlami formátovania.

Záver

V tomto článku sme si prešli základné odporúčania a postupy, ktoré ti môžu pomôcť napísať čistý kód Java. Zapamätaj si, že písanie čistého kódu Java je kľúčom k vývoju kvalitného softvéru.

Ak hľadáš prácu a si Java programátor, prezri si naše benefity pre zamestnancov a reaguj na najnovšie ponuky práce.

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť