Spoje, které vydrží dětské zacházen
Kde se cena skutečně lá
Sladění není o dokonalém seznamu. Je o tom, že každý kus má alespoň dvě využití a že přechod mezi jarem a létem zvládnete bez nákupní paniky. Když vám po týdnu nošení něco zůstane ležet, je to signál, že kus nepatří ani do jedné kapsle.
Zapomenout byste neměli ani na domácí router. Pokud máte doma Wi-Fi zabezpečenou jen slabým heslem nebo starším typem šifrování, jako je WEP, je to stejně riskantní jako otevřená síť. V nastavení routeru zvolte WPA2 nebo WPA3 a heslo dlouhé alespoň dvanáct znaků, které nikde nepoužíváte. Také změňte výchozí přihlašovací údaje do administrace routeru a vypněte vzdálenou správu, pokud ji nevyužíváte. Pravidelně kontrolujte, kdo je k vaší síti připojen – v administraci routeru najdete seznam zařízení.
Třetí návyk je o velikosti funkcí. Pokud funkce přesáhne zhruba dvacet řádků, pravděpodobně dělá víc věcí, než by měla. Nemusíš to počítat přesně. Stačí se zeptat: dokážu tuhle funkci popsat jednou větou bez spojky „a”? Když ne, rozděl ji. Malé funkce se snáz testují a snáz se v nich najde chyba. Zároveň platí, že funkce by měla mít co nejméně parametrů. Tři už jsou na hraně, čtyři znamenají, že si je při volání spleteš. Řešení je předat objekt s pojmenovanými vlastnostmi — vytvorUcet( jmeno, email, role ) — protože záměna pořadí přestane být možná.
Vrstvy, které zvládnou přechod d
Většina času při ladění nejde na složité logické chyby. Jde na to, že za týden nepoznáš, co znamená const d = a.filter(x => x.t >2). Mozek při čtení cizího i vlastního kódu potřebuje kontext. Pokud ho nedostane, začne hádat — a hádání při ladění stojí nejvíc času. Pět návyků níže není o estetice. Jsou o tom, kolik minut strávíš hledáním, proč se něco rozbilo.
Druhý návyk se týká čísel a řetězců v kódu. if (stav === 2) neznamená nic. if (stav === Stavy.ODESLANO) znamená všechno, i když hodnotu za týden změníš. Tomu se říká magická konstanta a je to jeden z nejčastějších zdrojů chyb, které se projeví až v produkci. Stejně tak setTimeout(fn, 86400000) nikdo nepřečte. Pojmenovaná konstanta DEN_V_MS zabere jeden řádek a ušetří půl hodiny dohadování, jestli je to den, nebo dva. U řetězců pozor na překlepy: “aktivni” vs. “aktívni” s diakritikou. JavaScript je nenajde. Pomůže jedna konstanta nebo objekt s hodnotami na jednom místě.
Pátý návyk je jediná zodpovědnost za vedlejší efekty. Funkce, která jen počítá a nic nemění, se ladí snadno — zavoláš ji, dostaneš výsledek, hotovo. Funkce, která zároveň čte soubor, mění globální stav a posílá požadavek, se ladí těžko, protože výsledek závisí na pořadí volání. Drž vedlejší efekty na okrajích programu a logiku uvnitř. Když se něco rozbije, budeš vědět, že problém není v čistém výpočtu. Těchto pět návyků nezní vzrušující, ale každý z nich ubírá minuty z času, který trávíš hledáním, proč to sakra nefunguje.
Pojmenuj podle toho, co věc je, ne jak vypadá První návyk je triviální, ale většina lidí ho nedodržuje: každá proměnná, funkce a parametr musí nést jméno, které říká, co obsahuje. data neříká nic. aktivniUzivatele říká všechno. U funkcí použij sloveso: nactiObjednavky, overEmail, ulozZmeny. Když funkci nedokážeš pojmenovat slovesem bez „a” nebo „nebo”, dělá toho moc a měla by se rozdělit. Typická chyba je pojmenovat funkci zpracuj() a strčit do ní validaci, zápis do databáze i odeslání e-mailu. Při ladění pak nemáš tušení, která z těch tří věcí selhala. Rozdělením získáš tři místa, kde můžeš přidat log nebo breakpoint, místo jednoho velkého černého boxu.
Čtvrtý návyk je návratové hodnoty. Funkce, která někdy vrátí objekt a někdy null, je past. Každý, kdo ji volá, musí myslet na obě varianty, a většina lidí na to zapomene. Buď vracej vždy stejný typ, nebo vyhoď chybu. Když vrátíš undefined, chyba se projeví až o tři volání dál, kde se snažíš přečíst vlastnost z ničeho. To je nejhorší druh ladění — hledáš příčinu daleko od místa, kde vznikla. Radši selži hned a nahlas. Prázdné pole místo null je také bezpečnější: for (const x of vysledky) funguje, i když nic nepřišlo.