K nezanedbatelným návykům patří i psaní komentářů. Komentáře by neměly popisovat to, co je vidět z kódu, ale vysvětlovat proč. Například proč je potřeba zpoždění, jaká obchodní pravidla se uplatňují, nebo proč je použita neobvyklá implementace. Vyhněte se komentářům typu // přičteme 1 nad řádkem count += 1; – to jenom zašumuje. Lepší je napsat // Zahrneme i počáteční hodnotu nuly.
Psát čistý kód není o psaní méně řádků, ale o tom, aby se v něm druhý programátor (nebo vy za půl roku) dokázal rychle zorientovat. Základním pravidlem je, že kód by měl být čitelný bez dlouhého přemýšlení. To znamená dát přednost explicitnímu pojmenování proměnných a funkcí před zkratkami, které šetří pár znaků, ale komplikují pochopení. Typickým příkladem je použití názvů jako data, temp nebo x tam, kde by stačilo userList nebo formattedDate. Čitelnost se vždycky vyplatí víc než kratší zápis.
Když zákazník požádá o odhad času, většina z nás automaticky vsadí na optimismus. V duchu si řekneme, že to stihneme dřív, a sdělíme termín, který nás pak dostane pod tlak. Výsledek? Zpoždění, omluvy a zákazník, který vám přestane věřit. Přitom stačí změnit způsob, jakým o čase mluvíte, a komunikace se stane nástrojem důvěry místo zdrojem stresu.
Proč je důležitá konzistence a vizuální hierarchie Uživatelé si rychle zvykají na vzorce. Pokud jedno tlačítko vypadá jako primární a druhé jako sekundární, musí to platit v celé aplikaci. Nezaměňujte barvy, velikosti ani umístění akčních prvků. Používejte jednotné rozestupy a zarovnání – mřížka o 8 bodech je univerzální řešení. Hlídejte si kontrast textu vůči pozadí, zejména u menších fontů. Nízký kontrast je častým problémem i v profesionálních aplikacích, protože na vývojářském monitoru to vypadá dobře, ale na mobilu venku je text nečitelný.
Optimální poměr není statický. Na začátku projektu s malým rozsahem vám stačí 90 % jednotkových testů. Jakmile codebase roste a přibývají integrační body, poměr se postupně mění. Sledujte, kde vznikají chyby, které se dostanou až do produkce. Pokud jsou to chyby v integraci, přidejte více integračních testů. Pokud jsou to logické chyby v jednotlivých metodách, posilte jednotkové. Testy jsou nástroj pro řízení rizik, ne cíl sám o sobě. Pravidelně revidujte, které testy skutečně zachytily chybu a které jen zabírají místo – ty nefunkční nebo redundantní bez váhání odstraňte.
Dalším problémem je nadměrné používání globálních proměnných. I když JavaScript umožňuje cokoliv přiřadit na window, taková proměnná se snadno přepíše a těžko se hledá. Místo toho zapouzdřete logiku do modulů nebo tříd a globální stav omezte na minimum. Když už musíte sdílet data, použijte explicitní předávání parametrů nebo nějaký stavový kontejner. Tím se snižuje riziko, že vám nějaká část kódu změní hodnotu, kterou potřebujete jinde.
Otestujte si své rozhraní na reálném zařízení. Emulátor nestačí – jiný výkon, dotyková odezva a velikost prvků mění celý dojem. Zkuste aplikaci používat jednou rukou, s mokrýma prstama nebo s vypnutým internetem. Tyto situace odhalí, kde se uživatel zasekne. Pokud máte čas, udělejte si rychlý test s kolegou, který projekt nezná. Pozorujte, kde zaváhá, co hledá a co mu chybí. To je nejcennější zpětná vazba.
Další pastí je psát dlouhé funkce, které dělají deset věcí najednou. Funkce by měla mít jednu zodpovědnost a měla by být krátká – ideálně do dvaceti řádků. Pokud potřebujete rozdělit logiku, vytvořte pomocné funkce s výstižnými názvy. Například místo jedné funkce processOrder, která počítá cenu, ověřuje zásoby a aktualizuje uživatele, rozdělte ji na validateOrder, calculateTotal a updateInventory. Tím se kód nejen lépe čte, ale také snáze testuje a opravuje.
Častou chybou je spoléhat se na testovací databázi, která je sdílená mezi vývojáři. Jeden spustí test, druhý mu smaže data, a výsledky jsou náhodné. Řešením je použít kontejnerizaci – každý běh testů si vytvoří čisté prostředí a po skončení ho zlikviduje. Tím se vyhnete flakym testům, které občas projdou a občas ne, a které vývojáři začnou ignorovat. Stejně tak se vyhněte testování přes síťová volání na produkční systémy – vždy používejte testovací endpointy nebo simulátory na úrovni protokolu.
Ošemetné vedlejší efekty a skryté mutace Častým zdrojem chyb je neúmyslná změna dat. Pokud funkce přijímá objekt, ale mění jeho vlastnosti, vzniká vedlejší efekt, který může ovlivnit jinou část programu. Tomu se vyhnete tím, že budete používat neměnitelné struktury – místo mutace pole vytvořte nové pomocí spread operátoru nebo metod jako map a filter. Zvlášť u stavů aplikace (např. Redux) je neměnnost klíčová. Také si dejte pozor na to, aby funkce nevracely různé typy podle okolností; konzistentní vstup a výstup je základem čitelného rozhraní.