ObrázokToto je článok, ktorého cieľom je tak trochu narušiť stereotyp, ktorý vládne v oblasti komentovania kódu. Súčasný stav sa najčastejšie popisuje ako: „Programátori málo alebo vôbec nekomentujú kód. Mali by ho viac komentovať.“ Je to naozaj tak? Môže existovať komentár, ktorý by kódu škodil?

Poďme sa na začiatok trochu zamyslieť, o čom komentovanie je. Hlavným účelom komentárov je (ako už napovedá názov) komentovať. To znamená informovať o tom, čo kód vykonáva. Vysvetľovať príkazy kódu. A to by mohla byť vážne užitočná vec. Ale to len v tom prípade, že by som prijal fakt, že kód, ktorý treba komentovať, je v poriadku. A teda v poriadku je aj samotné komentovanie. Z čias assemblera sme sa už pohli niekde inde a dnes sa pomerne veľa programov tvorí vo vyššom programovacom jazyku. Na vyšších programovacích jazykoch je pekné to, že sú krokom smerom od stroja k človeku. Okrem toho, že sú minimálne čitateľnejšie sami o sebe, majú aj väčšiu plastickosť(alebo ešte krajšie slovo je „tvárnosť“), čo im umožňuje presnejšie popísať problém, ktorý kód rieši. Schopnosť vytvoriť si sadu tried s metódami a premennými, ktoré si viete podľa ľubovôle pomenovať, otvára možnosti v tom, ako bude vyzerať vnútorný svet vášho programu. Inak povedané, môžete ho napísať dobre. A ak ho napíšete dobre, nemusíte ho vysvetľovať.

To, k čomu mierim, je fakt, že komentáre môžu byť často hrubou záplatou na zle napísaný kód. Príkladom (možno trochu extrémnym) môže byť zadefinovanie premennej:

// distance from left margine

int x;

A teraz to skúsime trochu upraviť:

int distanceFromLeftMargine;

Obidva tieto zápisy obsahujú rovnaké množstvo informácií a sú si prakticky rovnocenné. Rozdiel sa začne prejavovať až pri používaní tejto premennej niekde v kóde. V prvom prípade si musíte pri čítaní kódu v hlave automaticky budovať prekladový slovník (… “Čo bolo to x?“ … (chvíľka zamyslenia)… “Aha, vzdialenosť od ľavého okraja. Poďme ďalej …“). Takto vyzbrojený informáciami, ktoré sú v komentároch postupne dekódujete kód. V tom druhom žiadne kódovanie nie je potrebné. Informáciu o tom, čo je za premennú, máte všade tam, kde ju použijete. Takto môžete pristupovať ku názvom všetkých objektov v programe. Dobré pomenovanie je dôležité a komentáre sa mu bohužiaľ umožňujú vyhnúť. Nemusíte predsa dobre pomenovávať kód, ak ste ho okomentovali. Podobný problém je s komplikovaným kódom. Algoritmus sa dá napísať rôzne. Aj tak, že ho bude mať problém pochopiť ktokoľvek iný okrem vás. Ale zle napísaný kód vie prejsť cez kontrolu, ak má komentár. V prípade, že ak by som aj prijal takýto spôsob tvorby kódu, je s komentármi ešte jeden problém.

Komentáre predstavujú dokumentáciu kódu. Je to síce taká dokumentácia distribuovaná v kóde, ale stále je to dokumentácia, ktorá popisuje kód. Akákoľvek systémová dokumentácia má jeden spoločný problém a to je, že duplikuje popis riešenia voči kódu (duplicita popisu spočíva v tom, že kód sám už riešenie popisuje). A duplicita nie je dobrá, pretože so sebou prináša aktualizáciu. V našom prípade to znamená, že čím viac máte komentárov, tým skôr sa rozíde informačný obsah v komentároch s tým, čo kód robí. Ak už ste niekedy zažili schizofrenický pohľad na kód s komentárom, kde komentár hovoril jedno a kód robil zjavne niečo iné, tak viete o čom hovorím. Ono to stále nakoniec vyhrá kód, lebo ten má vždy pravdu ale divný pocit, či ten kód chápem správne a či naozaj predsa len nejako nerobí to, o čom hovorí komentár tam určite chvíľu je.

Aby to nevyzeralo, že komentár je najväčšie zlo na svete, tak existujú legitímne prípady, kedy sa dá použiť. Napríklad, ak začínate písať funkciu písaním pseudokódu medzi riadky, do ktorého potom dopisujete normálny kód. Alebo keď kód odpovedá na najzákernejšiu otázku zo všetkých: Prečo? (viac o jej zákernosti inde). Preto netvrdím, že sa pri pohľade na komentár treba automaticky prežehnať a očakávať najhoršie. Tvrdím len, že komentár sa môže stať lacnou náhradou za dobre napísaný kód. A pritom to ani zďaleka nie je to isté…

V súčasnosti mi nie je známy žiadny programovací jazyk, ktorý by nemal funkčnosť komentárov. Iste by bolo zaujímavé vidieť nejaký stredne veľký projekt napísaný v takomto jazyku. Buď by bol ten kód dobrý, alebo by sa z programátorského oddelenia ozývalo značne veľa nadávok.