Kód ninji

Programátoři ninjové z minulosti používali tyto triky, aby zbystřili mysl správců kódu.

Guruové pro kontrolu kódu je hledají v testovacích úlohách.

Začínající vývojáři je někdy používají ještě lépe než programátorští ninjové.

Pozorně si je přečtěte a zjistěte, kdo jste – ninja, nováček nebo možná recenzent kódu?

Ironie zjištěna

Mnozí se snaží následovat ninja cesty. Málokomu se to podaří.

Stručnost je duší důvtipu

Udělejte kód co nejkratší. Ukaž, jak jsi chytrý.

Nechte se vést jemnými jazykovými prvky.

Podívejte se například na tento ternární operátor '?' :

// taken from a well-known javascript library
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;

V pohodě, že? Pokud to napíšete, vývojář, který narazí na tento řádek a pokusí se pochopit, jaká je hodnota i bude mít veselý čas. Pak přijďte za vámi a hledejte odpověď.

Řekněte jim, že kratší je vždy lepší. Zaveďte je do cest ninjů.

Jednopísmenné proměnné

Dalším způsobem, jak kód zkrátit, je všude používat jednopísmenné názvy proměnných. Jako a , b nebo c .

Krátká proměnná mizí v kódu jako skutečný ninja v lese. Nikdo ho nebude moci najít pomocí „hledání“ editoru. A i kdyby to někdo udělal, nebude schopen „dešifrovat“ název a nebo b znamená.

…Ale existuje výjimka. Skutečný ninja nikdy nepoužije i jako počítadlo v "for" smyčka. Kdekoli, ale ne tady. Rozhlédněte se kolem sebe, existuje mnohem více exotických písmen. Například x nebo y .

Exotická proměnná jako počítadlo smyček je obzvláště skvělá, pokud tělo smyčky zabírá 1-2 stránky (pokud můžete, prodlužte ji). Pokud se pak někdo podívá hluboko do smyčky, nebude schopen rychle zjistit, že proměnná s názvem x je čítač smyček.

Používejte zkratky

Pokud pravidla týmu zakazují používání jednopísmenných a vágních jmen – zkraťte je, udělejte zkratky.

Takhle:

  • listlst .
  • userAgentua .
  • browserbrsr .
  • …atd

Takovým jménům bude rozumět pouze ten, kdo má skutečně dobrou intuici. Zkuste vše zkrátit. Pouze hodný člověk by měl být schopen podporovat vývoj vašeho kódu.

Leť vysoko. Buďte abstraktní.

Při výběru jména se snažte použít co nejabstraktnější slovo. Jako obj , data , value , item , elem a tak dále.

  • Ideální název proměnné je data . Použijte jej všude, kde můžete. Ve skutečnosti každá proměnná obsahuje data , že?

    …Ale co dělat, když data je již obsazen? Zkuste value , je také univerzální. Koneckonců, proměnná nakonec získá hodnotu .

  • Pojmenujte proměnnou podle jejího typu:str , num

    Vyzkoušejte je. Mladý zasvěcenec se může divit – jsou taková jména pro ninju opravdu užitečná? Opravdu, jsou!

    Jistě, název proměnné stále něco znamená. Říká, co je uvnitř proměnné:řetězec, číslo nebo něco jiného. Ale když se někdo zvenčí pokusí porozumět kódu, bude překvapen, když zjistí, že ve skutečnosti nejsou žádné informace! A nakonec nezmění váš dobře promyšlený kód.

    Typ hodnoty lze snadno zjistit laděním. Ale jaký je význam proměnné? Jaký řetězec/číslo ukládá?

    Bez dobré meditace to prostě nejde zjistit!

  • …Ale co když už takových jmen není? Stačí přidat číslo:data1, item2, elem5

Test pozornosti

Pouze opravdu pozorný programátor by měl být schopen porozumět vašemu kódu. Ale jak to zkontrolovat?

Jedním ze způsobů – použijte podobné názvy proměnných, například date a data .

Smíchejte je, kde můžete.

Rychlé čtení takového kódu je nemožné. A když dojde k překlepu... Ummm... Zasekli jsme se dlouho, je čas vypít čaj.

Inteligentní synonyma

Pomocí podobného jména pro stejné věci dělají život zajímavějším a ukazují vaši kreativitu veřejnosti.

Zvažte například předpony funkcí. Pokud funkce zobrazuje na obrazovce zprávu – spusťte ji display… , například displayMessage . A pokud jiná funkce zobrazuje na obrazovce něco jiného, ​​například uživatelské jméno, spusťte ji show… (jako showName ).

Naznačte, že mezi těmito funkcemi je nepatrný rozdíl, zatímco žádný není.

Uzavřete smlouvu s ostatními ninji z týmu:pokud John začne „ukazovat“ funkce s display... ve svém kódu pak mohl Peter použít render.. a Ann – paint... . Všimněte si, o kolik zajímavějším a rozmanitějším se kód stal.

…A teď hattrick!

Pro dvě funkce s důležitými rozdíly – použijte stejnou předponu!

Například funkce printPage(page) bude používat tiskárnu. A funkce printText(text) zobrazí text na obrazovce. Nechte neznalého čtenáře, aby se nad podobně pojmenovanou funkcí printMessage dobře zamyslel :„Kam je umístěna zpráva? Na tiskárnu nebo na obrazovku?“. Aby to opravdu svítilo, printMessage(message) měl by jej vypsat v novém okně!

Znovu použít jména

Novou proměnnou přidejte pouze v případě, že je to nezbytně nutné.

Místo toho znovu použijte existující názvy. Stačí do nich napsat nové hodnoty.

Ve funkci zkuste použít pouze proměnné předané jako parametry.

To by opravdu ztížilo identifikaci toho, co přesně je v proměnné now . A také odkud pochází. Účelem je rozvíjet intuici a paměť člověka, který kód čte. Člověk se slabou intuicí by musel analyzovat kód řádek po řádku a sledovat změny v každé větvi kódu.

Pokročilou variantou přístupu je skryté (!) nahrazení hodnoty něčím podobným uprostřed smyčky nebo funkce.

Například:

function ninjaFunction(elem) {
 // 20 lines of code working with elem

 elem = clone(elem);

 // 20 more lines, now working with the clone of the elem!
}

Kolega programátor, který chce pracovat s elem v druhé polovině funkce překvapí... Až při ladění po prozkoumání kódu zjistí, že pracují s klonem!

Pravidelně vidět v kódu. Smrtelně účinný i proti zkušenému ninjovi.

Podtržítka pro zábavu

Vložte podtržítka _ a __ před názvy proměnných. Jako _name nebo __value . Bylo by skvělé, kdybyste znali jejich význam. Nebo, lépe, přidejte je jen pro zábavu, bez zvláštního významu. Nebo různé významy na různých místech.

Zabijete dva králíky jednou ranou. Zaprvé se kód prodlouží a bude méně čitelný a zadruhé může kolega vývojář strávit dlouhou dobu snahou zjistit, co znamenají podtržítka.

Chytrý ninja vloží podtržítka na jedno místo kódu a vyhýbá se jim na jiných místech. Díky tomu je kód ještě křehčí a zvyšuje se pravděpodobnost budoucích chyb.

Ukažte svou lásku

Ať každý vidí, jak nádherné jsou vaše entity! Názvy jako superElement , megaFrame a niceItem určitě čtenáře poučí.

Z jedné ruky je skutečně něco napsáno:super.. , mega.. , nice.. Ale na druhou stranu – to nepřináší žádné podrobnosti. Čtenář se může rozhodnout hledat skrytý význam a hodinu nebo dvě meditovat ze své placené pracovní doby.

Překrývají vnější proměnné

Používejte stejné názvy pro proměnné uvnitř i vně funkce. Tak jednoduché. Žádné snahy vymýšlet nová jména.

let user = authenticateUser();

function render() {
 let user = anotherValue();
 ...
 ...many lines...
 ...
 ... // <-- a programmer wants to work with user here and...
 ...
}

Programátor, který skočí do render pravděpodobně nezaznamená, že existuje místní user stínování vnějšího.

Poté se pokusí pracovat s user za předpokladu, že se jedná o externí proměnnou, výsledek authenticateUser() … Past je odpružená! Dobrý den, debuggere…

Nežádoucí účinky všude!

Existují funkce, které vypadají, že nic nemění. Třeba isReady() , checkPermission() , findTags() … Předpokládá se, že provádějí výpočty, vyhledávají a vracejí data, aniž by měnili cokoli mimo ně. Jinými slovy, bez „vedlejších účinků“.

Opravdu krásný trik je přidat k nim kromě hlavního úkolu ještě „užitečnou“ akci.

Výraz omráčeného překvapení na tváři vašeho kolegy, když uvidí funkci s názvem is.. , check.. nebo find... změnit něco – rozhodně rozšíří vaše hranice rozumu.

Další způsob, jak překvapit, je vrátit nestandardní výsledek.

Ukažte své originální myšlení! Nechte volání checkPermission nevrací true/false , ale komplexní objekt s výsledky kontroly.

Ti vývojáři, kteří se snaží napsat if (checkPermission(..)) , bude se divit, proč to nefunguje. Řekněte jim:„Přečtěte si dokumenty!“. A dejte tento článek.

Výkonné funkce!

Neomezujte funkci tím, co je napsáno v jejím názvu. Buďte širší.

Například funkce validateEmail(email) může (kromě kontroly správnosti e-mailu) zobrazit chybovou zprávu a požádat o opětovné zadání e-mailu.

Další akce by neměly být z názvu funkce zřejmé. Opravdový ninja kodér je také neuvidí z kódu.

Spojení několika akcí do jedné chrání váš kód před opětovným použitím.

Představte si, že jiný vývojář chce pouze zkontrolovat e-mail a nevypsat žádnou zprávu. Vaše funkce validateEmail(email) to jim obojí nebude vyhovovat. Takže vaši meditaci nenaruší tím, že se na ni budou ptát.

Shrnutí

Všechny výše uvedené „rady“ jsou ze skutečného kódu… Někdy napsané zkušenými vývojáři. Možná ještě zkušenější než vy;)

  • Řiďte se některými z nich a váš kód bude plný překvapení.
  • Řiďte se mnoha z nich a váš kód bude skutečně váš, nikdo by ho nechtěl měnit.
  • Následujte všechny a váš kód se stane cennou lekcí pro mladé vývojáře, kteří hledají osvícení.