Rychlý kód, nebo čitelný? Rozdíl poznáte až při ladění
Typická chyba začátečníků je, že očichají, ochutnají špičkou jazyka nebo si všimnou, že houba „nechutná špatně". To je nebezpečný postup. Muchomůrka zelená chutná i voní příjemně a její jed se teplem nerozkládá. Další častá chyba: sběr do košíku, kde se houby promíchají a část se rozmačká. Pokud si nejste jistí, dejte každou houbu zvlášť a doma ji rozřízněte podélně. U muchomůrky uvidíte bílou dužninu bez barevných přechodů, u žampionu dužnina na řezu rychle růžoví nebo hnědne.
Postel umístěte podél vysoké zdi, ne pod šikminu. Pokud je pokoj opravdu malý, zvolte postel s úložným prostorem v podestýlce – šuplíky na lůžkoviny nahradí noční stolek i komodu. U psacího stolu platí, že dítě musí mít nad hlavou alespoň 75 cm volného prostoru, jinak se nebude cítit dobře. Stůl proto postavte kolmo ke šikmé stěně, ne rovnoběžně s ní. Získáte tak plnohodnotné místo na učení a zbytek pásu využijete na regály.
Prvním vodítkem je startování. Pokud motor točí pomaleji než obvykle, jako by se každá otáčka prodlužovala, baterie už nedodává plný výkon. Rozdíl poznáte snadno – zvuk startéru je mdlý, ne ostrý. V chladném ránu se tento rozdíl zvýrazní. Zapisujte si, kdy se to stalo. Pokud se to opakuje dva až tři dny po sobě, nečekejte a změřte napětí.
Nejčastější chyba je cpát do nízkého pásu skříň nebo pracovní místo. Dítě tam narazí hlavou, nebude se chtít učit a nábytek stejně nikdy nevyužijete. Naopak do nízkého pásu dejte zásuvkové kontejnery, které se vytahují kolmo ke zdi, nebo vestavěné police přesně podle sklonu střechy. Police nezavěšujte do úrovně, kde by překážely – jejich hloubku přizpůsobte výšce, aby se do nich dalo pohodlně dosáhnout vsedě.
Jak změřit stav baterie bez díl
Malé funkce a rané návraty místo vnořených podmínek Funkce delší než obrazovka se ladí špatně, protože v hlavě musíte držet příliš mnoho stavů. Držte se pravidla, že funkce má dělat jednu věc. Vnořené if bloky nahraďte ranými návraty: místo obalování celého těla podmínkou zkontrolujte vstup hned na začátku a při neplatnosti se vraťte. Kód se zploští, čte se shora dolů a chyba se hledá mnohem rychleji. Typická chyba je zapomenutý return v hloubce pěti úrovní — přesně tomu se takto vyhnete.
Žádný z těchto návyků nezabere mnoho času navíc. Naopak — každý z nich odečítá minuty z ladění. Začněte jedním, klidně tím nejmenším, a držte ho dva týdny. Jakmile si ho osvojíte, přidejte další. Čistý kód nevzniká najednou, ale z opakovaných malých rozhodnutí.
Většina času programátora nezmizí při psaní kódu, ale při hledání toho, proč nefunguje. Čistý kód není estetika pro estéty, je to nástroj, který zkracuje ladění z hodin na minuty. Následujících pět návyků se vyplatí zavést hned, ne až po dalším nočním hledání chyby.
Pište malé testy pro každou opravu. Když najdete chybu, napište nejdřív test, který ji reprodukuje, a teprve pak opravujte kód. Test vám potvrdí, že oprava skutečně zabrala, a zároveň zabrání tomu, aby se stejná chyba vrátila při další změně. Nemusí jít o velký testovací rámec — stačí funkce, která zavolá váš kód a porovná výsledek. Tento návyk se vyplatí nejvíc právě u zdánlivě triviálních oprav, kde lidé testy nejčastěji vynechávají.
Ošetřujte vstupy na hranici. Data z formuláře, z API nebo z úložiště nikdy nevěřte. Ověřte typ a tvar hned, když data vstoupí do funkce, a dál už pracujte s jistotou. Když kontrola chybí, chyba se projeví až o tři volání dál, kde už není zřejmé, odkud přišla. Ladění se tím prodlouží klidně desetkrát. Prázdné pole, null a undefined jsou nejčastější zdroje pádů — testujte je cíleně.
Nepoužívejte magické hodnoty. Číslo 86400000 v kódu nikomu nic neřekne. Pojmenovaná konstanta MILISEKUND_V_DNI vysvětlí záměr na první pohled. Stejně tak řetězce jako "active" opakované na deseti místech: jedna konstanta a máte jistotu, že se všechny výskyty změní společně. Překlep v řetězci je jedna z nejhloupějších chyb, které lze snadno vyloučit.
Pojmenovávejte věci podle toho, co dělají, ne jak vypadají. Funkce data, tmp nebo handle neřeknou nic ani za týden vám samotným. Místo getUserData() použijte nactiUzivatelePodleEmailu(). Pokud název neumíte vymyslet, pravděpodobně funkce dělá víc věcí, než by měla. To je první signál k rozdělení. Vyhněte se i zkratkám, které zná jen autor — usrAdr nikdo jiný nepřečte.