jak začít psát “komplexní” kód

Toto je příspěvek o přemýšlení o kódu, který píšete. Vše, co je zde obsaženo, je můj názor a vždy byste měli zvážit platnost mých názorů porovnáním s lepšími! Jazyk, který budu používat, je Javascript. Předpokladem pro pochopení tohoto článku je znalost přechodného JavaScriptu a znalost některých objektově orientovaných konceptů. Tento příspěvek je inspirován kapitolou 9 vynikající knihy Cristiny Lopesové “cvičení ve stylu programování”.

opravdu běžný vzor v kódu je—

  1. Definujte jednoduchý objekt
var store_item = {
name : 'wonderball'
}

2. Poté, abychom ji připravili k zobrazení na webové stránce, spustíme každou vlastnost pomocí některých funkcí.

addExclamationPoint(store_item);
capitalizeName(store_item);function addExclamationPoint(item) {
item.name = item.name + '!';
}function capitalizeName(item) {
// some code to capitalize item.name, cut out for brevity.
}

a tak často získáváme data připravená k zobrazení. Nyní, když má náš store_item velké jméno a vykřičník, můžeme jej zobrazit na naší webové stránce bez problémů. Pokud existuje třetí věc, kterou musíme udělat, jednoduše bychom napsali třetí funkci pro transformaci dat a předali položku jako obvykle.

větší, velký obrazový vzor, který jsme zde vytvořili, je:

Existuje několik luxusní podmínky pro tento typ programování jako ‘procedurální’, nebo ‘nezbytně nutné’, ale já bych to nazval jiný termín: “jednoduché”. Je to velmi jednoduché programování. Je to typ programování, který se každý učí jako první. Pro programy malého rozsahu, je to absolutně nejlepší způsob, jak programovat, protože lidé jsou dobří v sledování kdekoli od 1 do 10 logických kroků docela dobře.

Když se váš program dostane dostatečně velké (více než 10 transformace předtím, než se zobrazí data), nebo funkci je úprava mnohem datových objektů (více než 2), nebo máme hodně, POKUD prohlášení způsobující větvení logiku, to “jednoduché” programování místo toho se stane ‘nepořádek’.

Většina každý projekt nebo kus kódu dostane chaotický. Většina programování je vlastně kodéry přijít s způsoby, jak se vyhnout dělat nepořádek, ne řešení skutečného problému zobrazení dat. Práce programování je naučit se psát kód takovým způsobem, že můžeme použít 100 transformací na 100 kusů dat, a to není nepořádek’.

Nyní mi dovolte, abych vám představil velkou změnu vzoru výše, a pamatujte, že to, co se chystám ukázat, je prvním krokem, aby se stal více pokročilé kodér, protože to zlomí tě z “jednoduché” kódování. Seznamuje vás s novými způsoby přemýšlení o tom, jak udělat jednoduchou věc, jako je úprava některých dat pro webovou stránku. Objekt bude mít nyní vlastní funkci nazvanou “bind” a tato funkce bude zodpovědná za transformaci dat.

var store_item = {
name: 'wonderball',
bind: function(func) {
this.name = func(this.name);
return this;
}
}// Here are two functions I'll use to transform the store_item.name, each one now just takes a name and modifies it, neither function has any clue what properties it's changing in store_item anymore.function capitalize(name) {
return name.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() +
txt.substr(1).toLowerCase();
});
}function addExclamationPoint(name) {
return name + '!';
}store_item.bind(addExclamationPoint).bind(capitalize);

toto řešení se chová přesně jako původní “jednoduchý” kód výše, ale zdá se být složitější, proč? Protože pro jednoduchý úkol, který máme, je to přehnané, ale jaké jsou kompromisy této složitosti?

odpověď na to, pojďme mluvit o tom, co je různé:

  1. Máme to bláznivý, divný, ‘bind’ funkce, která bere jako argument, není nová hodnota pro jméno, ale místo toho další funkce, říkat, co teď?
  2. funkce capitalize a addExclamationPoint se liší, nyní nevolají item.name přímo už.
  3. už nenastavujeme jméno s’=’, místo toho používáme tento podivný store_item.bind (název_ funkcí), místo toho syntaxe.

s těmito třemi rozdíly se nyní musíme ptát sami sebe, je tato změna lepší? Možná ne, pokud projekt zůstane tak malý. Možná ano, pokud bude projekt mnohem větší.

klíčovou změnou je, že objekt store_item je nyní zodpovědný za zpracování stavu pomocí funkce bind. Samozřejmě, pokud jste chtěli, můžete přímo změnit store_item.name, ale objekt prakticky křičí: “Hej, použijte moji vázací funkci, abyste mě změnili!”.

ale teď je snadné vidět vzor, kde více store_items každý spravovat svůj vlastní stav s jejich vlastní .bind funkce:

// Three store items, each one with a different state.store_item1.bind(addExclamationPoint).bind(capitalize); //Wonderball!store_item2.bind(capitalize);
//Wonderballstore_item3.bind(addExclamationPoint);
//wonderball!

můžeme udělat 100 store_item je a řídit jejich stav je docela snadno. Jediné, co musíme udělat, je napsat funkci, která má jen návratovou hodnotu a použít náš objekt .bind funkce.

kouzlo tohoto vzoru je ve funkci vazby, takže to pojďme prozkoumat trochu víc.

// 1. First define the function, and have it take as an argument another function. Taking a function as an argument, instead of data is the core change here. bind: function(func) { // 2. This second line is the secret sauce, it will run the function you passed in with 'this.name' as an argument, and then assign whatever value is returned to this.name. Mull this over. this.name = func(this.name);// 3. Finally, return 'this'. You don't have to have this step in here, but returning 'this' is what allows .bind chainging to happen (.e.g. doing .bind().bind() vs .bind(); .bind();) return this;
}

takže tady to máte, udělali jsme náš kód složitější, ale nyní máme několik nových výhod:

  1. objekt nyní upravuje svůj vlastní stav a může to udělat výrazně V jednom řádku.
  2. funkce, které jsme napsali, jsou čistší, nemají-li upravit vlastnosti objektu, jako v příkladu výše, jen si vstup a vrátí výstup.
  3. víme, že když upravíme stavu objektu, funkce používáme asi nebude upravovat jakýkoliv jiný objekt státní omylem

Ale máme také několik stinné stránky:

  1. váš kód je rozhodně méně intuitivní pro nově příchozí nyní.
  2. pro malé stránky je tento kód příliš složitý.

takže jaký je konečný rozsudek, je tento způsob lepší? Horší? Více matoucí? (Zpočátku Ano.) Všechny tyto otázky jsou otevřené, ale mohu říci jednu věc pro jistotu, vzhledem k tomu, pochopení a vzory, jako je tento, je součástí učení Javascript a roste jako kodér. Neustálé používání “jednoduchého” způsobu kódování k řešení problémů se po chvíli stává neudržitelným. Pokud budete mít čas se dozvědět více “složité” způsob, jak věci dělat spoustu skvělých věcí se stalo: vaše schopnost myslet laterálně otevírá, si můžete přečíst více různorodé typy kódu, a zvýšit způsobů, jak si můžete myslet o řešení problémů. Možná je to skutečný přínos pro učení tohoto a dalších vzorců.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.