Náš kód musà být co nejÄistšà a co nejsnadnÄji Äitelný.
To je v podstatÄ umÄnà programovánà â vzÃt složitou úlohu a naprogramovat ji tak, aby kód byl souÄasnÄ správný a Äitelný ÄlovÄkem. Dobrý styl zápisu tomu znaÄnÄ napomáhá.
Syntaxe
UvádÃme pÅÃklad s nÄkterými navrhovanými pravidly (podrobnosti viz nÞe):
Nynà si tato pravidla a jejich důvody probereme podrobnÄ.
Nic tady nenà zasazeno do kamene. Toto jsou stylové preference, ne náboženská dogmata.
Složené závorky
Ve vÄtÅ¡inÄ JavaScriptových projektů se složené závorky pÚà âegyptskýmâ stylem, kdy je levá závorka na stejném Åádku jako odpovÃdajÃcà klÃÄové slovo â ne na novém Åádku. PÅed levou závorkou by také mÄla být mezera, jako zde:
if (podmÃnka) {
// dÄlej tohle
// ...a tohle
// ...a tohle
}
Důležitým krajnÃm pÅÃpadem je jednoÅádková konstrukce, napÅÃklad if (podmÃnka) dÄlejNÄco(). MÄli bychom vůbec použÃt závorky?
UvádÃme jednotlivé varianty s komentáÅem, takže můžete sami posoudit jejich Äitelnost:
- ð ZaÄáteÄnÃci nÄkdy pÚà takto. Å patnÄ! Složené závorky nejsou zapotÅebÃ:
if (n < 0) {alert(`${n}-tá mocnina nenà podporována`);} - ð UmÃstÄnà na samostatný Åádek bez složených závorek. Tohle nikdy nedÄlejte, jelikož snadno udÄláte chybu, když budete pÅidávat dalšà Åádky:
if (n < 0) alert(`${n}-tá mocnina nenà podporována`); - ð Jeden Åádek bez složených závorek â to je pÅijatelné, pokud je krátký:
if (n < 0) alert(`${n}-tá mocnina nenà podporována`); - ð Nejlepšà varianta:
if (n < 0) { alert(`${n}-tá mocnina nenà podporována`); }
Pro velmi krátký kód je dovolen jeden Åádek, napÅ. if (podmÃnka) return null. Ale kódový blok (poslednà uvedená varianta) bývá obvykle ÄitelnÄjÅ¡Ã.
Délka Åádku
Nikdo nenà rád, když musà ÄÃst dlouhý vodorovný Åádek kódu. Lepšà pÅÃstup je rozdÄlit jej.
NapÅÃklad:
// zpÄtné uvozovky ` umožÅujà rozdÄlit Åádek na vÃce Åádků
let ÅetÄzec = `
TC39 v ECMA International je skupina JavaScriptových vývojáÅů,
implementátorů, akademiků a dalÅ¡Ãch, kteÅà spolupracujà s komunitou,
aby udržovali a rozvÃjeli definici JavaScriptu.
`;
A pro pÅÃkazy if:
if (
id === 123 &&
mÄsÃÄnÃFáze === 'UbývánÃ' &&
znamenÃZvÄrokruhu === 'Váhy'
) {
zaÄniKouzlo();
}
Na maximálnà délce Åádku by se mÄl dohodnout celý tým. Obvykle bývá 80 nebo 120 znaků.
OdsazenÃ
Existujà dva druhy odsazenÃ:
-
Vodorovné odsazenÃ: 2 nebo 4 mezery.
Vodorovné odsazenà se dÄlá pomocà 2 nebo 4 mezer nebo pomocà vodorovného symbolu tabulátoru (klávesa Tab). O tom, které zvolit, se už dlouho vedou svaté války. V dneÅ¡nà dobÄ se vÃce použÃvajà mezery.
Výhodou mezer oproti tabulátorům je, že mezery umožÅujà konfigurovat odsazenà flexibilnÄji než symbol tabulátoru.
Můžeme napÅÃklad zarovnat parametry k levé závorce takto:
zobraz(parametry, zarovnané, // vlevo je odsazenà 7 mezer jeden, za, druhým ) { // ... } -
Svislé odsazenÃ: prázdné Åádky pro rozdÄlenà kódu do logických bloků.
I jediná funkce může být Äasto rozdÄlena do logických bloků. V nÞe uvedeném pÅÃkladu jsou svisle oddÄleny inicializace promÄnných, hlavnà smyÄka a vrácenà výsledku:
function mocnina(x, n) { let výsledek = 1; // <-- for (let i = 0; i < n; i++) { výsledek *= x; } // <-- return výsledek; }Vkládejte prázdný nový Åádek vÅ¡ude, kde pomáhá uÄinit kód ÄitelnÄjÅ¡Ãm. V kódu by nemÄlo být vÃce než devÄt Åádků za sebou bez svislého odsazenÃ.
StÅednÃky
StÅednÃk by mÄl být uveden za každým pÅÃkazem, i kdyby mohl být vynechán.
Existujà jazyky, v nichž je stÅednÃk zcela dobrovolný a použÃvá se jen zÅÃdka. V JavaScriptu vÅ¡ak existujà pÅÃpady, kdy se zlom Åádku neinterpretuje jako stÅednÃk, ÄÃmž se kód stává náchylnÄjÅ¡Ãm k chybám. VÃce o tom se pÃÅ¡e v kapitole Struktura kódu.
Jste-li zkuÅ¡ený programátor v JavaScriptu, můžete se rozhodnout pro bezstÅednÃkový kódovacà styl, napÅ. StandardJS. Jinak je vÅ¡ak lepšà stÅednÃky použÃvat, abyste se vyhnuli možným úskalÃm. VÄtÅ¡ina vývojáÅů stÅednÃky uvádÃ.
ÃrovnÄ vnoÅenÃ
Snažte se vyhnout pÅÃliÅ¡ mnoha úrovnÃm vnoÅenÃ.
NapÅÃklad v cyklu je nÄkdy dobrý nápad použÃt direktivu continue, abychom se vyhnuli dalÅ¡Ãmu vnoÅenÃ.
NapÅÃklad mÃsto použità vnoÅené podmÃnky if tÃmto způsobem:
for (let i = 0; i < 10; i++) {
if (podmÃnka) {
... // <- o jednu úroveÅ vnoÅenà vÃc
}
}
můžeme napsat:
for (let i = 0; i < 10; i++) {
if (!podmÃnka) continue;
... // <- žádná dalšà úroveÅ vnoÅenÃ
}
PodobnÄ můžeme postupovat s if/else a return.
NapÅÃklad dvÄ nÞe uvedené konstrukce jsou identické.
Možnost 1:
function mocnina(x, n) {
if (n < 0) {
alert("Záporné 'n' nenà podporováno");
} else {
let výsledek = 1;
for (let i = 0; i < n; i++) {
výsledek *= x;
}
return výsledek;
}
}
Možnost 2:
function mocnina(x, n) {
if (n < 0) {
alert("Záporné 'n' nenà podporováno");
return;
}
let výsledek = 1;
for (let i = 0; i < n; i++) {
výsledek *= x;
}
return výsledek;
}
Druhá konstrukce je ÄitelnÄjÅ¡Ã, protože âzvláštnà pÅÃpadâ n < 0 je oÅ¡etÅen hned na zaÄátku. Když je kontrola provedena, můžeme se pÅesunout k âhlavnÃmuâ toku kódu, aniž bychom potÅebovali dalšà vnoÅenÃ.
UmÃstÄnà funkcÃ
Jestliže pÃÅ¡eme nÄkolik âpomocnýchâ funkcà a kód, který je použÃvá, tak máme tÅi možnosti, jak funkce organizovat.
-
Deklarovat funkce pÅed kódem, který je použÃvá:
// deklarace funkcà function vytvoÅPrvek() { ... } function nastavHandler(prvek) { ... } function choÄKolem() { ... } // kód, který je použÃvá let prvek = vytvoÅPrvek(); nastavHandler(prvek); choÄKolem(); -
Nejprve kód, pak funkce:
// kód, který použÃvá funkce let prvek = vytvoÅPrvek(); nastavHandler(prvek); choÄKolem(); // --- pomocné funkce --- function vytvoÅPrvek() { ... } function nastavHandler(prvek) { ... } function choÄKolem() { ... } -
SmÄs: funkce je deklarována tam, kde je poprvé použita.
Ve vÄtÅ¡inÄ pÅÃpadů se dává pÅednost druhé variantÄ.
Je to proto, že pÅi Ätenà kódu chceme nejdÅÃve vÄdÄt, co kód dÄlá. Pokud je kód uveden jako prvnÃ, bude to zÅejmé od zaÄátku. Pak možná nebudeme muset funkce vůbec ÄÃst, zvláštÄ pokud je z jejich názvů dostateÄnÄ jasné, co dÄlajÃ.
Stylovà průvodci
Stylový průvodce obsahuje obecná pravidla o tom, âjak psátâ kód, tj. které uvozovky použÃvat, o kolik mezer odsazovat, maximálnà délku Åádku atd. Mnoho vedlejÅ¡Ãch vÄcÃ.
Když vÅ¡ichni Älenové týmu použÃvajà stejného stylového průvodce, bude kód vypadat jednotnÄ bez ohledu na to, který Älen týmu ho napsal.
SamozÅejmÄ si tým vždy může napsat svého vlastnÃho stylového průvodce, ale obvykle to nenà zapotÅebÃ. Existuje mnoho průvodců, z nichž si lze vybrat.
NÄkteré oblÃbené možnosti:
- JavaScriptový stylový průvodce Google
- JavaScriptový stylový průvodce Airbnb
- Idiomatic.JS
- StandardJS
- (a mnoho dalÅ¡Ãch)
Pokud jste zaÄÃnajÃcà vývojáÅ, zaÄnÄte podle pÅÃkladu na zaÄátku této kapitoly. Pak si můžete projÃt jiné stylové průvodce, abyste zÃskali dalšà nápady a rozhodli se, který se vám lÃbà nejvÃc.
Automatické lintery
Lintery jsou nástroje, které umÄjà automaticky zkontrolovat styl vaÅ¡eho kódu a navrhnout zlepÅ¡enÃ.
Výborné na nich je, že tato kontrola stylu umà najÃt i nÄkteré chyby, napÅÃklad pÅeklepy v názvech promÄnných nebo funkcÃ. Pro tuto jejich vlastnost se použÃvánà linteru doporuÄuje, i když se nechcete vázat k jednomu konkrétnÃmu âstylu zápisuâ.
Zde jsou nÄkteré dobÅe známé lintery:
- JSLint â jeden z prvnÃch linterů.
- JSHint â vÃce nastavenà než JSLint.
- ESLint â pravdÄpodobnÄ nejnovÄjÅ¡Ã.
VÅ¡echny tuto práci odvedou. Autor použÃvá ESLint.
VÄtÅ¡ina linterů je integrována s mnoha oblÃbenými editory: jednoduÅ¡e povolte plugin v editoru a nakonfigurujte styl.
NapÅÃklad pro ESLint byste mÄli udÄlat následujÃcÃ:
- Nainstalujte Node.js.
- Nainstalujte ESLint pÅÃkazem
npm install -g eslint(npm je instalátor JavaScriptových balÃků). - VytvoÅte konfiguraÄnà soubor s názvem
.eslintrcv koÅenové složce vaÅ¡eho JavaScriptového projektu (ve složce, která obsahuje vÅ¡echny vaÅ¡e soubory). - Nainstalujte/povolte ve svém editoru plugin, který jej spojà s ESLintem. VÄtÅ¡ina editorů jej má.
UvádÃme pÅÃklad souboru .eslintrc:
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"no-console": 0,
"indent": 2
}
}
Zde direktiva "extends" oznamuje, že konfigurace je založena na sadÄ nastavenà âeslint:recommendedâ. Poté si specifikujeme vlastnÃ.
Je také možné si mÃsto toho stáhnout sady stylových pravidel z webu a pak je rozÅ¡ÃÅit. Pro podrobnosti ohlednÄ instalace viz https://eslint.org/docs/user-guide/getting-started.
Také nÄkterá IDE obsahujà zabudovaný linting, který je vyhovujÃcÃ, ale ne tak nastavitelný jako ESLint.
ShrnutÃ
VÅ¡echna syntaktická pravidla uvedená v této kapitole (a v odkazovaných stylových průvodcÃch) smÄÅujà ke zvýšenà Äitelnosti vaÅ¡eho kódu. VÅ¡echna jsou diskutovatelná.
Když uvažujeme o psanà âlepÅ¡Ãhoâ kódu, mÄli bychom si klást otázky âCo uÄinà kód ÄitelnÄjÅ¡Ãm a snadnÄjÅ¡Ãm k porozumÄnÃ?â a âCo nám pomůže vyvarovat se chyb?â. To je to hlavnÃ, co bychom mÄli mÃt na pamÄti, když si vybÃráme styly kódovánà a diskutujeme o nich.
Ätenà oblÃbených stylových průvodců nám umožnà držet krok s nejnovÄjÅ¡Ãmi myÅ¡lenkami o trendech stylů zápisu programu a nejlepÅ¡Ãch praktikách.
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â¦)