Programovanie

10 konceptov jazyka JavaScript, ktoré musí každý vývojár Node.js ovládať

Rahul Mhatre je vedúcim vývojového tímu v spoločnosti Software AG.

S jadrom JavaScript a motorom V8, architektúrou založenou na udalostiach a škálovateľnosťou priamo z krabice sa Node.js rýchlo stal de facto štandardom pre vytváranie webových aplikácií a produktov SaaS. Rámec Node.js, ako napríklad Express, Sails a Socket.IO, umožňuje používateľom rýchlo zavádzať aplikácie a sústrediť sa iba na obchodnú logiku.

Node.js vďačí za svoju obrovskú popularitu JavaScriptu. JavaScript je multiparadigmový jazyk, ktorý podporuje mnoho rôznych štýlov programovania vrátane funkčného programovania, procedurálneho programovania a objektového programovania. Umožňuje vývojárovi flexibilitu a využitie rôznych štýlov programovania.

JavaScript však môže byť dvojsečný meč. Multiparadigmatická povaha JavaScriptu znamená, že takmer všetko je premenlivé. Pri písaní kódu Node.js teda nemôžete opomínať pravdepodobnosť mutácie objektu a rozsahu. Pretože v jazyku JavaScript chýba optimalizácia koncových volaní (čo umožňuje rekurzívnym funkciám opätovné použitie rámcov zásobníka na rekurzívne volania), je nebezpečné používať rekurziu pre veľké iterácie. Okrem podobných úskalí má Node.js jedno vlákno, takže je nevyhnutné, aby vývojári písali asynchrónny kód.

JavaScript môže byť prínosom, ak sa používa opatrne - alebo prekliatím, ak ste nerozvážni. Dodržiavanie štruktúrovaných pravidiel, návrhových vzorov, kľúčových pojmov a základných pravidiel vám pomôže zvoliť optimálny prístup k problému. Ktorým kľúčovým konceptom by mali programátori Node.js rozumieť? Ďalej uvediem 10 konceptov JavaScriptu, ktoré sú podľa mňa najdôležitejšie pre písanie efektívneho a škálovateľného kódu Node.js.

Súvisiace video: Tipy a triky pre Node.js

V tomto vysvetľujúcom videu sa naučte niekoľko techník, ktoré môžu zlepšiť vaše skúsenosti s vývojom uzlov.

IIFE JavaScriptu: Okamžite vyvolané funkčné výrazy

Okamžite vyvolaný funkčný výraz (IIFE) je funkcia, ktorá sa vykoná hneď po vytvorení. Nesúvisí so žiadnymi udalosťami ani s asynchrónnym vykonávaním. IIFE môžete definovať, ako je uvedené nižšie:

(funkcia () {

// celý váš kód tu

// ...

})();

Prvá dvojica zátvoriek function () {...} prevádza kód vo vnútri zátvoriek na výraz. Druhá dvojica zátvoriek volá funkciu vyplývajúcu z výrazu. IIFE možno tiež označiť ako anonymnú funkciu, ktorá si sama vyvoláva. Jeho najbežnejším použitím je obmedzenie rozsahu premennej vytvorenej pomocou var alebo zapuzdriť kontext, aby sa zabránilo kolíziám mien.

Uzávery JavaScriptu

Uzávierka v JavaScripte je vnútorná funkcia, ktorá má prístup k rozsahu svojej vonkajšej funkcie, aj keď vonkajšia funkcia vrátila kontrolu. Uzávierka robí premenné vnútornej funkcie súkromnými. Jednoduchý príklad uzavretia je uvedený nižšie:

počet var = = (funkcia () {

var _counter = 0;

funkcia return () {return _counter + = 1;}

})();

count ();

count ();

count ();

> // počítadlo je teraz 3

Premenná počítať je priradená vonkajšia funkcia. Vonkajšia funkcia beží iba raz, čím sa počítadlo vynuluje a vráti sa vnútorná funkcia. The _počítadlo k premennej je prístupná iba vnútorná funkcia, vďaka ktorej sa správa ako súkromná premenná.

Prototypy JavaScriptu

Každá funkcia jazyka JavaScript má prototypovú vlastnosť, ktorá sa používa na pripojenie vlastností a metód. Túto vlastnosť nie je možné vymenovať. Umožňuje vývojárovi pripojiť k svojim objektom metódy alebo členské funkcie. JavaScript podporuje dedenie iba prostredníctvom vlastnosti prototypu. V prípade zdedeného objektu, prototypová vlastnosť ukazuje na nadradeného objektu. Bežným prístupom k pripájaniu metód k funkcii je použitie prototypov, ako je uvedené nižšie:

funkcia Obdĺžnik (x, y) {

this._length = x;

this._breadth = y;

}

Rectangle.prototype.getDimensions = function () {

návrat {dĺžka: táto.dĺžka, šírka: táto.šírka};

};

Rectangle.prototype.setDimensions = function (len, bred) {

this._length = len;

this._breadth = chovaný;

};

Súkromné ​​nehnuteľnosti v jazyku JavaScript pomocou uzávierok

JavaScript vám umožňuje definovať súkromné ​​vlastnosti pomocou predpony podčiarknutia, ako je uvedené v príklade vyššie. To však nebráni používateľovi v priamom prístupe alebo úprave vlastnosti, ktorá má byť súkromná.

Definovanie súkromného vlastníctva pomocou uzávierok vám pomôže vyriešiť tento problém. Členské funkcie, ktoré potrebujú prístup k súkromným vlastnostiam, by mali byť definované na samotnom objekte. Súkromné ​​nehnuteľnosti môžete vytvoriť pomocou uzávierok, ako je uvedené nižšie:

funkcia Obdĺžnik (_dĺžka, _ šírka) {

this.getDimensions = function () {

návrat {dĺžka: _dĺžka, šírka: _ šírka};

     };

this.setDimension = function (len, bred) {

_length = len;

_ šírka = chovaná

    };

}

Vzor modulu JavaScript

Vzor modulu je najčastejšie používaným návrhovým vzorom v JavaScripte na dosiahnutie voľne prepojeného a dobre štruktúrovaného kódu. Umožňuje vám vytvárať verejné a súkromné ​​úrovne prístupu. Jeden spôsob, ako dosiahnuť vzor modulu, je uvedený nižšie:

var Direction = (funkcia () {

var _direction = 'vpred'

var changeDirection = funkcia (d) {

_smer = d;

  }

návrat {setDirection: function (d) {

changeDirection (d);

console.log (_smer);

          }

  };

})();

Direction.setDirection ('dozadu'); // Výstupy: 'dozadu'

console.log (Direction._direction);

Vzor odhalenia modulu je podobný vzoru modulu, kde sa premenné a metódy, ktoré je potrebné odhaliť, vrátia v objektovom literále. Vyššie uvedený príklad je možné zapísať pomocou vzoru Odhaľovací modul nasledovne:

var Direction = (funkcia () {

var _direction = 'vpred';

var _privateChangeDirection = funkcia (d) {

_smer = d;

  }

návrat {

setDirection: _privateChangeDirection

  };

})();

Zdvíhanie JavaScriptu

JavaScript pred vykonaním kódu presunie premenné a vyhlásenia funkcií na vrchol ich rozsahu. Tomu sa hovorí zdvíhanie. Bez ohľadu na to, kam v kóde umiestnite deklaráciu funkcií a premenné, tlmočník ich presunie na vrchol svojej oblasti pôsobnosti. To môže alebo nemusí byť tam, kde ich chcete mať. Ak nie, potom bude mať váš program chyby.

Deklarácie premenných sa spracujú pred vykonaním ľubovoľného kódu. Je iróniou, že nedeklarované premenné neexistujú, kým im nebude priradená hodnota. To spôsobí, že všetky nedeklarované premenné sa stanú globálnymi premennými. Aj keď sú vyhlásenia funkcií zdvihnuté, výrazy funkcií nie sú zdvihnuté. Pri zdvíhaní premenných a funkcií má JavaScript poradie priorít.

Priorita je uvedená nižšie od vyššej po nižšiu:

  • Variabilné priradenie
  • Deklarácia funkcie
  • Variabilné vyhlásenia

Aby ste sa vyhli chybám, mali by ste svoje premenné a funkcie deklarovať na začiatku každého rozsahu.

Curry JavaScript

Currying je metóda, vďaka ktorej sú funkcie flexibilnejšie. Pomocou funkcie curried môžete odovzdať všetky argumenty, ktoré funkcia očakáva, a získať výsledok, alebo môžete zadať iba podmnožinu argumentov a získať funkciu späť, ktorá čaká na zvyšné argumenty. Jednoduchý príklad kari je uvedený nižšie:

var myFirstCurry = funkcia (slovo) {

návratová funkcia (užívateľ) {

návrat [slovo, ",", užívateľ] .join ("");

  };

};

var HelloUser = myFirstCurry ("Hello");

HelloUser ("Rahul"); // Výstup: „Dobrý deň, Rahul“

Originálnu funkciu curries je možné zavolať priamo tak, že odovzdáte každý z parametrov v samostatnej zátvorke jeden za druhým, ako je uvedené nižšie:

myFirstCurry („Hey, wassup!“) („Rahul“); // Výstup: „Hey, wassup !, Rahul“

Metódy použitia, volania a viazania kódu JavaScript

Je nevyhnutné, aby každý vývojár JavaScriptu pochopil rozdiel medzi hovor, uplatniťa viazať metódy. Tieto tri funkcie sú si podobné v tom, že ich prvým argumentom je vždy „táto“ hodnota alebo kontext, ktorému chcete dať funkciu, na ktorú metódu voláte.

Z týchto troch hovor je najjednoduchšie. Je to to isté ako vyvolanie funkcie pri určovaní jej kontextu. Tu je príklad:

var užívateľ = {

meno: "Rahul Mhatre",

whatIsYourName: function () {

console.log (this.name);

     }

};

user.whatIsYourName (); // Výstup: "Rahul Mhatre",

var user2 = {

názov: "Neha Sampat"

};

user.whatIsYourName.call (user2); // Výstup: „Neha Sampat“

Poznač si to uplatniť je takmer rovnaký ako hovor. Jediný rozdiel je v tom, že argumenty odovzdávate ako pole a nie osobitne. S poľami sa manipuluje ľahšie v JavaScripte, čo otvára väčšie množstvo možností pre prácu s funkciami. Tu je príklad použitia uplatniť a hovor:

var užívateľ = {

pozdrav: „Ahoj!“,

greetUser: function (userName) {

console.log (this.greet + "" + meno používateľa);

     }

};

var greet1 = {

pozdrav: „Hola“

};

user.greetUser.call (greet1, "Rahul") // Výstup: "Hola Rahul"

user.greetUser.apply (greet1, ["Rahul"]) // Výstup: "Hola Rahul"

The viazať metóda umožňuje odovzdať argumenty funkcii bez jej vyvolania. Vráti sa nová funkcia s argumentmi ohraničenými pred akýmikoľvek ďalšími argumentmi. Tu je príklad:

var užívateľ = {

pozdrav: „Ahoj!“,

greetUser: function (userName) {

console.log (this.greet + "" + meno používateľa);

}

};

var greetHola = user.greetUser.bind ({greet: "Hola"});

var greetBonjour = user.greetUser.bind ({greet: "Bonjour"});

greetHola ("Rahul") // Výstup: "Hola Rahul"

greetBonjour ("Rahul") // Výstup: "Bonjour Rahul"

Memoizácia JavaScriptu

Memoizácia je optimalizačná technika, ktorá urýchľuje vykonávanie funkcií ukladaním výsledkov drahých operácií a vrátením výsledkov z vyrovnávacej pamäte, keď sa znova vyskytne rovnaká množina vstupov. Objekty JavaScript sa správajú ako asociatívne polia, čo uľahčuje implementáciu memoizácie v JavaScripte. Napríklad môžeme previesť rekurzívnu faktoriálnu funkciu na memoárovú faktoriálnu funkciu, ako je uvedené nižšie:

function memoizeFunction (func) {

var cache = {};

návratová funkcia () {

var key = argumenty [0];

if (cache [kľúč]) {

vrátiť cache [kľúč];

          }

else {

var val = func.apply (toto, argumenty);

cache [key] = val;

spätný val;

          }

  };

}

var fibonacci = memoizeFunction (funkcia (n)

návrat (n === 0);

Preťaženie metódy JavaScript

Preťaženie metód umožňuje, aby viaceré metódy mali rovnaký názov, ale rôzne argumenty. Kompilátor alebo tlmočník určuje, ktorá funkcia sa má volať, na základe počtu odovzdaných argumentov. JavaScript nie je priamo podporovaný preťažením metód. Môžete však dosiahnuť niečo podobné, ako je uvedené nižšie:

function overloadMethod (object, name, fn) {

if (! object._overload) {

object._overload = {};

     }

if (! object._overload [meno]) {

object._overload [name] = {};

    }

if (! object._overload [name] [fn.length]) {

object._overload [name] [fn.length] = fn;

    }

objekt [meno] = funkcia () {

if (this._overload [meno] [argumenty.dĺžka])

vrátiť this._overload [meno] [argumenty.dĺžka]. použiť (toto, argumenty);

     };

funkcia Students () {

overloadMethod (this, "find", function () {

// Nájsť študenta podľa mena

  });

overloadMethod (this, "find", function (first, last) {

// Nájdite študenta podľa mena a priezviska

  });

}

var študenti = noví študenti ();

students.find (); // Nájde všetko

students.find ("Rahul"); // Vyhľadá študentov podľa mena

students.find ("Rahul", "Mhatre"); // Nájde používateľov podľa mena a priezviska

Keď sa v Node.js dobre zorientujete, všimnete si, že existuje veľa spôsobov, ako vyriešiť takmer každý problém. Správny prístup je však kritický. Zlý prístup spôsobí viac vedľajších účinkov, ako sú nepravidelné alebo chybné aplikácie alebo regresie, ktoré vás nútia prepísať celú logiku. Na druhej strane správny prístup položí základ robustnej, efektívnej a škálovateľnej aplikácie.

10 konceptov JavaScriptu popísaných v tomto článku predstavuje základné informácie, ktoré by mal každý vývojár Node.js vedieť. Ale sú špičkou ľadovca. JavaScript je výkonný a zložitý. Čím viac ho budete používať, tým viac pochopíte, aký rozsiahly je v skutočnosti JavaScript. Lepšie porozumenie tak rozsiahleho jazyka vám určite pomôže vyhnúť sa chybám. Medzitým si osvojte správne základy a uvidíte vynikajúce výsledky.

Rahul Mhatre je vedúcim vývojového tímu v spoločnosti Software AG. Predtým bol technickým architektom v spoločnosti Built.io, ktorú získala spoločnosť Software AG.

Nové technologické fórum poskytuje miesto na preskúmanie a diskusiu o vznikajúcich podnikových technológiách v nebývalej hĺbke a šírke. Výber je subjektívny, založený na našom výbere technológií, ktoré považujeme za dôležité a pre čitateľov najväčší záujem. neprijíma marketingové záruky na zverejnenie a vyhradzuje si právo upravovať všetok prispievaný obsah. Všetky otázky posielajte na adresu [email protected].

$config[zx-auto] not found$config[zx-overlay] not found