Jak vÃme z kapitoly Struktura kódu, komentáÅe mohou být jednoÅádkové, které zaÄÃnajà //, a vÃceÅádkové /* ... */.
Obvykle je použÃváme k popisu, jak a proÄ kód funguje.
Na prvnà pohled může být komentovánà samozÅejmé, ale zaÄÃnajÃcà programátoÅi je Äasto použÃvajà nesprávnÄ.
Å patné komentáÅe
ZaÄáteÄnÃci tÃhnou k psanà komentáÅů, které vysvÄtlujÃ, âco se v kódu dÄjeâ. NapÅÃklad:
// Tento kód dÄlá toto (...) a toto (...)
// ...a kdo vÃ, co jiného...
velmi;
složitý;
kód;
V dobrém kódu by vÅ¡ak množstvà takových âvysvÄtlujÃcÃchâ komentáÅů mÄlo být minimálnÃ. Kód by mÄl být srozumitelný i bez nich.
Platà jedno zlaté pravidlo: âJe-li kód natolik nejasný, že vyžaduje komentáÅ, možná by mÄl být pÅepsán.â
Recept: extrahujte funkce
NÄkdy se vyplatà nahradit kus kódu funkcÃ, napÅÃklad:
function zobrazPrvoÄÃsla(n) {
dalÅ¡ÃPrvoÄÃslo:
for (let i = 2; i < n; i++) {
// ovÄÅÃ, zda i je prvoÄÃslo
for (let j = 2; j < i; j++) {
if (i % j == 0) continue dalÅ¡ÃPrvoÄÃslo;
}
alert(i);
}
}
Lepšà varianta s vyjmutou funkcà jePrvoÄÃslo:
function zobrazPrvoÄÃsla(n) {
for (let i = 2; i < n; i++) {
if (!jePrvoÄÃslo(i)) continue;
alert(i);
}
}
function jePrvoÄÃslo(n) {
for (let i = 2; i < n; i++) {
if (n % i == 0) return false;
}
return true;
}
Nynà kódu snadno porozumÃme. Funkce sama o sobÄ se stává komentáÅem. Takový kód se nazývá sebepopisujÃcÃ.
Recept: vytváÅejte funkce
A máme-li dlouhý âkus kóduâ, jako tÅeba:
// zde pÅidáme whisky
for(let i = 0; i < 10; i++) {
let kapka = vezmiWhisky();
pÅiÄichni(kapka);
pÅidej(kapka, sklenice);
}
// zde pÅidáme džus
for(let t = 0; t < 3; t++) {
let rajÄe = vezmiRajÄe();
prozkoumej(rajÄe);
let džus = rozmaÄkej(rajÄe);
pÅidej(džus, sklenice);
}
// ...
pak může být lepšà varianta jej pÅepsat do funkcà takto:
pÅidejWhisky(sklenice);
pÅidejDžus(sklenice);
function pÅidejWhisky(nádoba) {
for(let i = 0; i < 10; i++) {
let kapka = vezmiWhisky();
//...
}
}
function pÅidejDžus(nádoba) {
for(let t = 0; t < 3; t++) {
let rajÄe = vezmiRajÄe();
//...
}
}
OpÄt funkce samy o sobÄ ÅÃkajÃ, co se dÄje. Nenà tady co komentovat. I struktura kódu je lepÅ¡Ã, když je kód rozdÄlený. Je jasné, co která funkce provádÃ, co pÅijÃmá a co vracÃ.
V realitÄ se nemůžeme âvysvÄtlujÃcÃmâ komentáÅům úplnÄ vyhnout. Existujà složité algoritmy a existujà chytrá âvylepÅ¡enÃâ pro úÄely optimalizace. ObecnÄ bychom se vÅ¡ak mÄli snažit udržet kód jednoduchý a sebepopisujÃcÃ.
Dobré komentáÅe
VysvÄtlujÃcà komentáÅe jsou tedy obecnÄ Å¡patné. Jaké komentáÅe jsou dobré?
- Popis architektury
- Poskytujà vysokoúrovÅový pohled na komponenty, jak spolu komunikujÃ, jaký je ÅÃdicà tok v různých situacÃch⦠StruÄnÄ ÅeÄeno â pohled na kód z ptaÄà perspektivy. Existuje i speciálnà jazyk UML urÄený k tvorbÄ diagramů na vysoké úrovni architektury, které popisujà kód. RozhodnÄ má smysl si jej prostudovat.
- Dokumentace parametrů a použità funkcÃ
- Existuje speciálnà syntaxe JSDoc pro dokumentaci funkcÃ: použitÃ, parametry, návratová hodnota.
NapÅÃklad:
/**
* Vrátà x umocnÄné na n-tou.
*
* @param {number} x ÄÃslo, které se má umocnit.
* @param {number} n Exponent, musà být pÅirozené ÄÃslo.
* @return {number} x umocnÄné na n-tou.
*/
function mocnina(x, n) {
...
}
Takové komentáÅe nám umožÅujà porozumÄt úÄelu funkce a použÃvat ji správnÄ, aniž bychom se dÃvali na jejà kód.
Mimochodem i mnoho editorů, napÅÃklad WebStorm, jim dokáže porozumÄt a použÃvá je k naÅ¡eptávánà a automatické kontrole kódu.
Existujà i nástroje jako JSDoc 3, které umÄjà z tÄchto komentáÅů vygenerovat dokumentaci v HTML. VÃce informacà o JSDoc si můžete pÅeÄÃst na https://jsdoc.app.
- ProÄ se tato úloha Åešà zrovna takhle?
-
To, co je psáno, je důležité. Ale to, co nenà psáno, může být jeÅ¡tÄ důležitÄjšà k pochopenà toho, o co jde. ProÄ je tato úloha ÅeÅ¡ena právÄ tÃmto způsobem? Kód nám odpovÄÄ nedává.
Existuje-li mnoho způsobů, jak tuto úlohu ÅeÅ¡it, proÄ zrovna tento? ZvláštÄ pokud to nenà zrovna nejzÅejmÄjšà způsob.
Bez takových komentáÅů může nastat následujÃcà situace:
- Vy (nebo váš kolega) otevÅete kód, napsaný pÅed nÄjakou dobou, a vidÃte, že je âneoptimálnÃâ.
- PomyslÃte si: âTo jsem byl tehdy ale hloupý, teÄ jsem o hodnÄ chytÅejÅ¡Ãâ, a pÅepÃÅ¡ete ho na âjasnÄjšà a korektnÄjÅ¡Ãâ variantu.
- â¦PotÅeba pÅepsat kód byla dobrá. Ale po spuÅ¡tÄnà uvidÃte, že âjasnÄjÅ¡Ãâ ÅeÅ¡enà je ve skuteÄnosti horÅ¡Ã. MatnÄ si vzpomenete proÄ, jelikož jste to kdysi už zkouÅ¡eli. VrátÃte kód na korektnà variantu, ale byla to ztráta Äasu.
KomentáÅe, které vysvÄtlujà ÅeÅ¡enÃ, jsou velmi důležité, protože nám pomáhajà vyvÃjet správnou cestou.
- Jsou v kódu nÄjaké finty? ProÄ jsou použity?
-
Obsahuje-li kód cokoli promyÅ¡leného a neintuitivnÃho, má rozhodnÄ smysl jej komentovat.
ShrnutÃ
KomentáÅe jsou důležitým znakem dobrého vývojáÅe: jejich pÅÃtomnost, ale i jejich absence.
Dobré komentáÅe nám umožÅujà kód dobÅe udržovat, pozdÄji se k nÄmu vracet a efektivnÄji jej využÃvat.
Komentujte toto:
- Celkovou architekturu, pohled z vysoké úrovnÄ.
- PoužÃvánà funkcÃ.
- Důležitá ÅeÅ¡enÃ, zvláštÄ pokud nejsou jasná na prvnà pohled.
Zdržte se komentáÅů:
- Které vysvÄtlujà âjak kód fungujeâ a âco dÄláâ.
- Vkládejte je jen tehdy, když nenà možné udržet kód natolik jednoduchý a sebepopisujÃcÃ, že je nevyžaduje.
KomentáÅe se také použÃvajà pro nástroje automatické dokumentace jako JSDoc3, které je naÄtou a vygenerujà z nich dokumentaci v HTML (nebo v jakémkoli jiném formátu).
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)