Domov arrow Programovanie arrow Čistý kód - Všeobecné zápachy
Čistý kód - Všeobecné zápachy
ImageRozhodol som sa preložiť kapitolu z knihy od autora Robert C. Martin. Kniha sa nazýva Clean Code a kapitola, ktorú som sa odhodlal prepísať do Slovenčiny má číslo 17, začína sa na strane 285, a v originále má názov "Smells and Heuristics".

Zaoberá sa niekoľkými kategóriami problémov často sa nachádzajúcich v zdrojovom kóde aplikácií. Tieto postrehy a návody na vyhnutie sa problémom sú uplatniteľné pre všetky programovacie jazyky, hoci príklady sú uvádzané v jazyku Java. No znovu podotýkam, prečítať by si ich mal každý programátor, aby sme si ušetrili do bdúcnosti bolesti hlavy pri údržbe hrozného kódu.

Kategórie, do ktorých Robert zápachy kódu podelil sú tieto: komentáre, prostredie, funkcie, mená, testy, všeobecné zápachy a zápachy konkrétne v Java kóde.

Všeobecné zápachy (V)

V1: Viacero jazykov v jednom zdrojovom súbore

Dnešné programovacie prostredie umožňuje vývojárom skombinovať niekoľko rôznych programovacích jazykov v jednom zdrojovom súbore. Napríklad, Java zdroják môže obsahovať útržky XML, HTML, YAML, JavaDoc, Angličtiny, JavaScript-u, atď. Alebo PHP skripty preplnené jazykmi PHP, HTML, CSS, JavaScript a SQL (klasická receptúra skriptu od začiatočníka).

Ideálne by zdrojový súbor mal obsahovať jeden a len jeden jazyk. Realisticky, budeme väčšinou v zdrojáku pomiešané dva jazyky (programovací a ľudský v komentároch) alebo možno viac, no je dôležité vynaložiť úsilie, aby sme minimalizovali ich počet aj rozsah použitia iných jazykov v rámci zdrojového súboru.

V2: Kód nerobí, čo očakávame

Podľa princípu minimálneho prekvapenia (The Principle of Least Surprise) každá funkcia či trieda, by mala implementovať správanie - mala by sa chovať tak - ako by každý jej používateľ (klient) očakával. Ak by sme napríklad mali funkciu, ktorá prekladá reťazec (String) popisujúci deň v týždni na objekt typu enum:

Day day = DayDate.StringToDay(String dayName);

Očakávali by sme, že táto funkcia premení reťažec "Pondelok" na deň pondelok, taktiež by sme ale očakávali, že bude fungovať rovnako aj so skráteným názvom dňa, teda "Pon" alebo "Po" a taktiež podvedome očakávame, že si vie poradiť s veľkými či malými písmenami a medzerami na konci či začiatku. Teda očakávali by sme, že aj "pondelok" alebo "pon " sa premenia na deň pondelok.

Keď ale očakávané správanie nie je naimplementované, čitateľ a používateľ takéhoto kódu sa už nemôže spoliehať na svoju intuíciu o tom, ako daný kúsok kódu funguje. Stráca dôveru v autora kódu a musí sa odvolávať na dokumentáciu a čítať všetko o tom, ako trieda DayDate v skutočnosti funguje.

V3: Nesprávne správanie v krajných situáciách

Je samozrejmosťou, že kód by sa mal správať korektne. Problém je však to, že si občas neuvedomujeme ako komplikované korektné správanie kódu je. Vývojári často napíšu kód, o ktorom sa domnievajú, že bude fungovať správne. Potom sa spoliehajú na svoju intuíciu, radšej než by sa uistili, že ich kód sa správa korektne v každom kúte a v každej krajnej situácii.

Nič nenahradí patričnú usilovnosť. Každá krajná situácia, podmienka, výnimka a finta predstavuje niečo, čo by mohlo zničiť elegantný a intuitívny algoritmus. Nespoliehajte sa len na svoju intuíciu. Vyhždajte každú krajnú situáciu a napíšte pre ňu test.

V4: Vypnuté či nahradené ochranné mechanizmy

Je riskantné nahradzovať, či celkom sa vyhýbať ochranným opatreniam a mechanizmom. Niekedy môže byť manuálna kontrola nad serialVersionUID nevyhnutná, ale vždy je riskantná. Vypnutie niektorých z varovaní kompilátora (či dokonca všetkých varovaní!) vám môže pomôcť získať úspešný build, ale riskujete nekonečné sedenie za debuggerom - a naháňanie dobre ukrytých chýb.

Vypínanie či ignorovanie niektorých zlyhávajúcich testov s myšlienkou, že ich opravíte inokedy, je rovnako zlé ako keby ste predstierali, že vám kreditné karty poskytujú peniaze zadarmo.

V5: Duplikácia

Toto je jednen z najhorších zápachov kódu a preto by ste mali dávať obzvlášť pozor. Prakticky každý autor píšúci o softvérovom dizajne spomenie jedno pravidlo - Dave Thomas and Andy Hunt ho nazvali "DRY principle" (princíp suchého kódu), kde akronym DRY znamená "Don't repeat yourself" - "Neopakuj sa".

Každá duplikácia v kóde je premárnená šanca na abstrakciu. Táto duplikácia by pravdepodobne mohla byť vyňatá a umiestnená do zvlášť metódy či dokonca triedy.



Kategórie, do ktorých Robert zápachy kódu podelil sú tieto: komentáre, prostredie, funkcie, mená, testy, všeobecné zápachy a zápachy konkrétne v Java kóde.

Posledná úprava ( Friday, 24 May 2013 )
 
< Predchádzajúca   Ďalšia >