Programiranje

10 konceptov JavaScript, ki jih mora obvladati vsak razvijalec Node.js

Rahul Mhatre je vodja ekipe razvijalcev pri Software AG.

Z jedrom JavaScript in motorjem V8, arhitekturo, ki temelji na dogodkih, in razširljivostjo je Node.js hitro postal dejanski standard za ustvarjanje spletnih aplikacij in izdelkov SaaS. Okviri Node.js, kot so Express, Sails in Socket.IO, uporabnikom omogočajo hiter zagon aplikacij in se osredotočijo le na poslovno logiko.

Node.js je za svojo izjemno priljubljenost zelo dolžan JavaScriptu. JavaScript je multiparadigm jezik, ki podpira številne različne sloge programiranja, vključno s funkcionalnim programiranjem, proceduralnim programiranjem in objektno usmerjenim programiranjem. Razvijalcu omogoča prilagodljivost in izkoriščanje različnih programov.

Toda JavaScript je lahko dvorezen meč. Narava multiparadigme JavaScript pomeni, da je skoraj vse spremenljivo. Tako pri pisanju kode Node.js ne morete odstraniti verjetnosti mutacije predmeta in obsega. Ker JavaScript nima optimizacije repnih klicev (kar rekurzivnim funkcijam omogoča ponovno uporabo okvirov skladov za rekurzivne klice), je nevarnost uporabe rekurzije za velike ponovitve. Poleg takšnih pasti je Node.js enonitni, zato razvijalci nujno pišejo asinhrono kodo.

JavaScript je lahko blagodejno, če ga uporabljate previdno, ali neprijeten, če ste nepremišljeni. Upoštevanje strukturiranih pravil, vzorcev oblikovanja, ključnih konceptov in osnovnih pravil vam bo pomagalo izbrati optimalen pristop k problemu. Katere ključne koncepte bi morali razumeti programerji Node.js? Spodaj bom delil 10 konceptov JavaScript, za katere menim, da so najpomembnejši za pisanje učinkovite in razširljive kode Node.js.

Povezani video: Node.js nasveti in triki

V tem obrazložitvenem videu se naučite več tehnik, ki lahko izboljšajo vašo izkušnjo razvoja vozlišča.

JavaScript IIFE: takoj izraženi funkcijski izrazi

Takoj poklicani izraz funkcije (IIFE) je funkcija, ki se izvede takoj, ko je ustvarjena. Nima povezave z nobenim dogodkom ali asinhronim izvajanjem. Določite lahko IIFE, kot je prikazano spodaj:

(funkcija () {

// vso svojo kodo tukaj

// ...

})();

Prvi par oklepajev funkcija () {...} pretvori kodo znotraj oklepajev v izraz.Drugi par oklepajev pokliče funkcijo, ki je rezultat izraza. IIFE lahko opišemo tudi kot samopokličejočo anonimno funkcijo. Njegova najpogostejša uporaba je omejiti obseg spremenljivke, ustvarjene prek var ali za enkapsulacijo konteksta, da se prepreči trčenje imen.

Zapiranje JavaScript

Zapiranje v JavaScript je notranja funkcija, ki ima dostop do obsega zunanje funkcije, tudi potem, ko je zunanja funkcija vrnila nadzor. Zaprtje naredi spremenljivke notranje funkcije zasebne. Preprost primer zapiranja je prikazan spodaj:

var count = (function () {

var _counter = 0;

funkcija vrnitve () {return _counter + = 1;}

})();

štetje ();

štetje ();

štetje ();

> // števec je zdaj 3

Spremenljivka štetje je dodeljena zunanja funkcija. Zunanja funkcija se zažene samo enkrat, kar števec nastavi na nič in vrne notranjo funkcijo. The _števec Do spremenljivke lahko dostopa samo notranja funkcija, zaradi česar se obnaša kot zasebna spremenljivka.

Prototipi JavaScript

Vsaka funkcija JavaScript ima prototipno lastnost, ki se uporablja za pritrditev lastnosti in metod. Te lastnosti ni našteti. Razvijalcu omogoča, da na svoje predmete pritrdi metode ali funkcije člana. JavaScript podpira dedovanje samo prek lastnosti prototipa. V primeru podedovanega predmeta lastnost prototipa kaže na nadrejenega predmeta. Pogost pristop za pritrditev metod na funkcijo je uporaba prototipov, kot je prikazano spodaj:

funkcija Pravokotnik (x, y) {

this._length = x;

this._breadth = y;

}

Rectangle.prototype.getDimensions = function () {

vrni {length: this._length, width: this._breadth};

};

Rectangle.prototype.setDimensions = funkcija (lena, vzrejena) {

this._length = len;

this._breadth = bred;

};

Zasebne lastnosti JavaScript, z uporabo zapore

JavaScript vam omogoča definiranje zasebnih lastnosti z uporabo podčrtaja, kot je prikazano v zgornjem primeru. Vendar to uporabniku ne preprečuje neposrednega dostopa ali spreminjanja lastnosti, ki naj bi bila zasebna.

Opredelitev zasebnih lastnosti s pomočjo zapore vam bo pomagalo rešiti to težavo. Funkcije članov, ki potrebujejo dostop do zasebnih lastnosti, je treba definirati na samem objektu. Zasebne lastnosti lahko ustvarite z zapirali, kot je prikazano spodaj:

funkcija Pravokotnik (_length, _breadth) {

this.getDimensions = function () {

return {length: _length, width: _breadth};

     };

this.setDimension = function (len, bred) {

_length = len;

_širina = vzrejena

    };

}

Vzorec modula JavaScript

Vzorec modula je najpogosteje uporabljen vzorec oblikovanja v JavaScript za doseganje ohlapno povezane, dobro strukturirane kode. Omogoča vam ustvarjanje javnih in zasebnih ravni dostopa. Spodaj je prikazan en način za doseganje vzorca modula:

var Direction = (function () {

var _direction = 'naprej'

var changeDirection = function (d) {

_smer = d;

  }

vrni {setDirection: function (d) {

changeDirection (d);

console.log (_smer);

          }

  };

})();

Direction.setDirection ('nazaj'); // izhodi: 'nazaj'

console.log (Direction._direction);

Vzorec modula razkrivanja je podoben vzorcu modula, kjer se spremenljivke in metode, ki jih je treba izpostaviti, vrnejo v dobesedno dobesedno. Zgornji primer lahko napišemo z vzorcem modula razkrivanja, kot sledi:

var Direction = (function () {

var _direction = 'naprej';

var _privateChangeDirection = funkcija (d) {

_smer = d;

  }

vrni {

setDirection: _privateChangeDirection

  };

})();

JavaScript dvigovanje

JavaScript pred izvajanjem kode premakne spremenljivke in izjave funkcij na vrh njihovega obsega. To se imenuje dvigovanje. Ne glede na to, kam v svojo kodo postavite deklaracijo funkcij in spremenljivk, jih tolmač premakne na vrh njihovega obsega. To je lahko ali pa ne tam, kjer jih želite. Če ne, bo imel vaš program napake.

Izjave spremenljivk se obdelajo, preden se izvede katera koli koda. Ironično je, da neprijavljene spremenljivke ne obstajajo, dokler jim ne dodelijo vrednosti. Zaradi tega vse neprijavljene spremenljivke postanejo globalne spremenljivke. Čeprav so izjave funkcij dvignjene, izrazi funkcij niso dvignjeni. JavaScript ima prednostni vrstni red med dvigovanjem spremenljivk in funkcij.

Prednost je dana spodaj od višje do nižje:

  • Spremenljiva dodelitev
  • Izjava o funkciji
  • Izjave spremenljivk

Da bi se izognili napakam, morate spremenljivke in funkcije prijaviti na začetku vsakega obsega.

JavaScript currying

Currying je metoda, s katero lahko funkcije prilagodite. S funkcijo curried lahko posredujete vse argumente, ki jih funkcija pričakuje, in dobite rezultat, lahko pa tudi samo podnabor argumentov in prejmete funkcijo, ki čaka na ostale argumente. Preprost primer curryja je podan spodaj:

var myFirstCurry = funkcija (beseda) {

funkcija vrnitve (uporabnik) {

vrni [beseda, ",", uporabnik] .join ("");

  };

};

var HelloUser = myFirstCurry ("Pozdravljeni");

HelloUser ("Rahul"); // Izhod: "Pozdravljen, Rahul"

Izvirno ukrivljeno funkcijo lahko pokličete neposredno tako, da vsak od parametrov prenesete v ločen nabor oklepajev enega za drugim, kot je prikazano spodaj:

myFirstCurry ("Hey, wassup!") ("Rahul"); // Rezultat: "Hej, izgubi se! Rahul"

JavaScript uporabljajo, kličejo in vežejo metode

Vsak razvijalec JavaScript mora nujno razumeti razliko med pokličite, prijaviti, in vezati metode. Tri funkcije so si podobne, saj je njihov prvi argument vedno vrednost "this" ali kontekst, ki mu želite dodeliti funkcijo, v katero prikličete metodo.

Od treh, pokličite je najlažje. To je enako kot priklic funkcije med podajanjem njenega konteksta. Tu je primer:

var uporabnik = {

ime: "Rahul Mhatre",

whatIsYourName: function () {

console.log (this.name);

     }

};

user.whatIsYourName (); // Izhod: "Rahul Mhatre",

var user2 = {

ime: "Neha Sampat"

};

user.whatIsYourName.call (uporabnik2); // Izhod: "Neha Sampat"

Upoštevajte to prijaviti je skoraj enako kot pokličite. Edina razlika je v tem, da argumente posredujete kot matriko in ne ločeno. Z nizi je lažje upravljati v JavaScript-u, kar odpira večje število možnosti za delo s funkcijami. Tu je primer uporabe prijaviti in pokličite:

var uporabnik = {

pozdrav: "Pozdravljeni!",

greetUser: function (userName) {

console.log (this.greet + "" + userName);

     }

};

var greet1 = {

pozdrav: "Hola"

};

user.greetUser.call (greet1, "Rahul") // Izhod: "Hola Rahul"

user.greetUser.apply (greet1, ["Rahul"]) // Izhod: "Hola Rahul"

The vezati metoda vam omogoča, da argumente prenesete v funkcijo, ne da bi jo priklicali. Vrne se nova funkcija z argumenti, omejenimi pred nadaljnjimi argumenti. Tu je primer:

var uporabnik = {

pozdrav: "Pozdravljeni!",

greetUser: function (userName) {

console.log (this.greet + "" + userName);

}

};

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

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

greetHola ("Rahul") // Rezultat: "Hola Rahul"

greetBonjour ("Rahul") // Rezultat: "Bonjour Rahul"

Spominjanje JavaScript

Spominjanje je tehnika optimizacije, ki pospeši izvajanje funkcije s shranjevanjem rezultatov dragih operacij in vrnitvijo predpomnjenih rezultatov, ko se ponovi isti nabor vhodov. Objekti JavaScript se obnašajo kot asociativna polja, kar olajša izvajanje memoiziranja v JavaScript. Na primer, rekurzivno funkcijo faktorja lahko pretvorimo v funkcijo memoriranja faktorije, kot je prikazano spodaj:

funkcija memoizeFunction (func) {

predpomnilnik var = =};

funkcija vrnitve () {

ključ var = argumenti [0];

if (cache [key]) {

povratni predpomnilnik [ključ];

          }

sicer {

var val = func.apply (to, argumenti);

predpomnilnik [ključ] = val;

povratni val;

          }

  };

}

var fibonacci = memoizeFunction (funkcija (n)

vrnitev (n === 0);

Preobremenitev metode JavaScript

Preobremenitev metode omogoča, da ima več metod isto ime, vendar različne argumente. Prevajalnik ali tolmač na podlagi števila predanih argumentov določi, katero funkcijo naj pokliče. Preobremenitev metode v JavaScript ni neposredno podprta. Lahko pa dosežete nekaj podobnega, kot je prikazano spodaj:

function overloadMethod (objekt, ime, fn) {

if (! object._overload) {

object._overload = {};

     }

if (! object._overload [ime]) {

object._overload [ime] = {};

    }

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

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

    }

objekt [ime] = funkcija () {

if (this._overload [ime] [argument.length])

vrni this._overload [ime] [argument.length] .apply (to, argumenti);

     };

funkcija Študenti () {

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

// Poiščite študenta po imenu

  });

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

// Poiščite študenta po imenu in priimku

  });

}

var students = novi študenti ();

students.find (); // Najde vse

students.find ("Rahul"); // Išče učence po imenu

students.find ("Rahul", "Mhatre"); // Išče uporabnike po imenu in priimku

Ko boste dobro seznanjeni z Node.js, boste opazili, da obstaja veliko načinov za reševanje skoraj vseh težav. Toda pravilen pristop je ključnega pomena. Napačen pristop bo povzročil več stranskih učinkov, kot so neenakomerne ali napačne aplikacije ali regresije, zaradi katerih boste morali napisati celotno logiko. Na drugi strani bo pravi pristop postavil temelje za robustno, učinkovito in razširljivo aplikacijo.

10 konceptov JavaScript, opisanih v tem članku, je osnov, ki bi jih moral poznati vsak razvijalec Node.js. So pa vrh ledene gore. JavaScript je zmogljiv in zapleten. Bolj ko ga uporabljate, bolj boste razumeli, kako velik JavaScript je v resnici. Boljše razumevanje tako obsežnega jezika vam bo zagotovo pomagalo preprečiti napake. Medtem si pravilno oglejte osnove in videli boste odlične rezultate.

Rahul Mhatre je vodja ekipe razvijalcev pri Software AG. Prej je bil tehnični arhitekt pri Built.io, ki ga je prevzel Software AG.

Forum New Tech ponuja prizorišče za raziskovanje in razpravo o nastajajoči podjetniški tehnologiji v globini in širini brez primere. Izbor je subjektiven in temelji na našem izboru tehnologij, za katere menimo, da so pomembne in najbolj zanimajo bralce. ne sprejema tržnih zavarovanj za objavo in si pridržuje pravico do urejanja celotne prispevane vsebine. Vsa vprašanja pošljite na [email protected].

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