Programavimas

Kiekvienas „Node.js“ kūrėjas turi įsisavinti 10 „JavaScript“ koncepcijų

Rahul Mhatre yra „Software AG“ kūrėjų komandos vadovas.

Kadangi „JavaScript“ ir „V8“ variklis yra svarbiausias, į įvykius orientuota architektūra ir išplečiamas mastelis, „Node.js“ greitai tapo de facto žiniatinklio programų ir „SaaS“ produktų kūrimo standartu. „Node.js“ sistemos, tokios kaip „Express“, „Sails“ ir „Socket.IO“, leidžia vartotojams greitai paleisti programas ir sutelkti dėmesį tik į verslo logiką.

„Node.js“ skolingas „JavaScript“ už didžiulį populiarumą. „JavaScript“ yra daugiaparadigminė kalba, palaikanti daugybę skirtingų programavimo stilių, įskaitant funkcinį programavimą, procedūrinį programavimą ir objektinį programavimą. Tai leidžia kūrėjui būti lankstiam ir pasinaudoti įvairiais programavimo stiliais.

Bet „JavaScript“ gali būti dviašmenis kardas. „JavaScript“ daugiaparadigminis pobūdis reiškia, kad beveik viskas yra keičiama. Taigi, rašydami „Node.js“ kodą, negalite atmesti objekto ir apimties mutacijos tikimybės. Kadangi „JavaScript“ trūksta uodegos skambučių optimizavimo (o tai leidžia rekursinėms funkcijoms pakartotinai naudoti rėmelių rėmus rekursiniams skambučiams), pavojinga naudoti rekursiją didelėms iteracijoms. Be tokių spąstų, „Node.js“ yra viena gija, todėl kūrėjams būtina rašyti asinchroninį kodą.

„JavaScript“ gali būti palaima, jei naudojama atsargiai, arba „bane“, jei esate neapgalvotas. Laikydamiesi struktūrizuotų taisyklių, dizaino modelių, pagrindinių sąvokų ir pagrindinių taisyklių, galite pasirinkti optimalų požiūrį į problemą. Kurias pagrindines sąvokas turėtų suprasti „Node.js“ programuotojai? Žemiau aš pasidalinsiu 10 „JavaScript“ koncepcijų, kurios, mano manymu, yra svarbiausios norint parašyti efektyvų ir keičiamo dydžio „Node.js“ kodą.

Susijęs vaizdo įrašas: „Node.js“ patarimai ir gudrybės

Šiame aiškinamojo vaizdo įraše sužinokite keletą būdų, kurie gali pagerinti jūsų mazgų kūrimo patirtį.

„JavaScript IIFE“: iškart iškviečiamos funkcijų išraiškos

Iškart iškviečiama funkcijos išraiška (IIFE) yra funkcija, kuri vykdoma iškart ją sukūrus. Jis neturi ryšio su jokiais įvykiais ar asinchroniniu vykdymu. IIFE galite apibrėžti taip, kaip parodyta žemiau:

(funkcija() {

// visas jūsų kodas čia

// ...

})();

Pirmoji skliaustų pora funkcija(){...} skliaustuose esantį kodą paverčia išraiška. Antroji skliaustų pora iškviečia funkciją, kylančią iš išraiškos. IIFE taip pat gali būti apibūdinama kaip savarankiška anoniminė funkcija. Dažniausias jo naudojimas yra apriboti kintamojo, pagaminto naudojant, apimtį var arba apibendrinti kontekstą, kad būtų išvengta vardų susidūrimų.

„JavaScript“ uždarymai

„JavaScript“ uždarymas yra vidinė funkcija, turinti prieigą prie išorinės funkcijos taikymo srities, net kai išorinė funkcija grąžina valdymą. Uždarymas daro vidinės funkcijos kintamuosius privačius. Žemiau pateiktas paprastas uždarymo pavyzdys:

var count = (funkcija () {

var _counter = 0;

grąžinimo funkcija () {return _counter + = 1;}

})();

suskaičiuoti ();

suskaičiuoti ();

suskaičiuoti ();

> // dabar skaitiklis yra 3

Kintamasis suskaičiuoti priskiriama išorinė funkcija. Išorinė funkcija veikia tik vieną kartą, o tai nustato nulį ir grąžina vidinę funkciją. _skaičiuotojas kintamąjį galima pasiekti tik naudojant vidinę funkciją, dėl kurios jis elgiasi kaip privatus kintamasis.

„JavaScript“ prototipai

Kiekviena „JavaScript“ funkcija turi prototipo ypatybę, kuri naudojama pridedant ypatybes ir metodus. Ši savybė nėra suskaičiuota. Tai leidžia kūrėjui prie savo objektų pridėti metodus ar nario funkcijas. „JavaScript“ palaiko paveldėjimą tik per prototipo ypatybę. Paveldimo objekto atveju prototipo ypatybė nurodo objekto tėvą. Bendras būdas pridėti metodus prie funkcijos yra naudoti prototipus, kaip parodyta žemiau:

funkcija Stačiakampis (x, y) {

tai._ ilgis = x;

tai._ plotis = y;

}

Stačiakampis.prototype.getDimensions = funkcija () {

grįžti {ilgis: tai._ ilgis, plotis: tai._ plotis};

};

Stačiakampis.prototype.setDimensions = funkcija (len, veisiama) {

tai._ ilgis = len;

tai._ plotis = veisiamas;

};

„JavaScript“ privačios nuosavybės, naudojant uždarymus

„JavaScript“ leidžia apibrėžti privačias ypatybes naudojant apatinį brūkšnį, kaip parodyta aukščiau pateiktame pavyzdyje. Tačiau tai netrukdo vartotojui tiesiogiai pasiekti ar modifikuoti turtą, kuris turėtų būti privatus.

Apribojus privačias nuosavybes naudojant uždarymo būdus, galėsite išspręsti šią problemą. Nario funkcijos, kurioms reikalinga prieiga prie privačių nuosavybių, turėtų būti apibrėžtos pačiame objekte. Galite padaryti privačias nuosavybes uždarydami, kaip parodyta žemiau:

funkcija Stačiakampis (_ ilgis, _ plotis) {

this.getDimensions = funkcija () {

grįžti {ilgis: _length, width: _breadth};

     };

this.setDimension = funkcija (len, veisiama) {

_ ilgis = len;

_ plotis = veisiamas

    };

}

„JavaScript“ modulio modelis

Modulio modelis yra dažniausiai naudojamas „JavaScript“ dizaino šablonas, norint gauti laisvai susietą, gerai struktūrizuotą kodą. Tai leidžia jums sukurti viešos ir privačios prieigos lygius. Vienas iš būdų pasiekti modulio modelį parodytas žemiau:

var Kryptis = (funkcija () {

var _direction = 'pirmyn'

var changeDirection = funkcija (d) {

_direction = d;

  }

return {setDirection: funkcija (d) {

changeDirection (d);

console.log (_direction);

          }

  };

})();

Direction.setDirection („atgal“); // Išėjimai: „atgal“

console.log (Direction._direction);

Atskleidžiantis modulio modelis yra panašus į modulio modelį, kuriame kintamieji ir metodai, kuriuos reikia atidengti, pateikiami objekto pažodžiui. Pirmiau pateiktą pavyzdį galima parašyti naudojant „Revealing Module“ modelį taip:

var Kryptis = (funkcija () {

var _direction = 'pirmyn';

var _privateChangeDirection = funkcija (d) {

_direction = d;

  }

grįžti {

setDirection: _privateChangeDirection

  };

})();

„JavaScript“ kėlimas

Prieš vykdydami kodą, „JavaScript“ perkelia kintamuosius ir funkcijų deklaracijas į savo srities viršų. Tai vadinama kėlimu. Nepaisant to, kur jūs įtraukiate funkcijų ir kintamųjų deklaraciją į savo kodą, vertėjas jas perkelia į viršų. Tai gali būti ir ne ten, kur jų norite. Jei ne, tada jūsų programoje bus klaidų.

Kintamos deklaracijos apdorojamos prieš vykdant bet kurį kodą. Ironiška, kad nedeklaruotų kintamųjų nėra, kol jiems nėra priskirta reikšmė. Dėl to visi nedeklaruoti kintamieji tampa visuotiniais kintamaisiais. Nors funkcijų deklaracijos yra iškeliamos, funkcijų išraiškos nėra iškeliamos. „JavaScript“ turi prioritetinę tvarką, kai keliami kintamieji ir funkcijos.

Toliau prioritetas teikiamas nuo aukštesnio iki žemesnio:

  • Kintama užduotis
  • Funkcijos deklaracija
  • Kintamos deklaracijos

Norėdami išvengti klaidų, turėtumėte deklaruoti savo kintamuosius ir funkcijas kiekvienos srities pradžioje.

„JavaScript“ karijavimas

Karis yra būdas padaryti funkcijas lankstesnes. Naudodami „curried“ funkciją galite perduoti visus argumentus, kurių tikisi funkcija, ir gauti rezultatą, arba galite perduoti tik argumentų pogrupį ir gauti funkciją, kuri laukia likusių argumentų. Toliau pateikiamas paprastas kario pavyzdys:

var myFirstCurry = funkcija (žodis) {

grąžinimo funkcija (vartotojas) {

return [žodis, ",", vartotojas] .join ("");

  };

};

var HelloUser = myFirstCurry ("Labas");

„HelloUser“ („Rahul“); // Rezultatas: „Labas, Rahul“

Originalią „curried“ funkciją galima tiesiogiai iškviesti perduodant kiekvieną parametrą atskiruose skliaustų rinkiniuose vienas po kito, kaip parodyta žemiau:

„myFirstCurry“ („Ei, vapsva!“) („Rahul“); // Rezultatas: „Ei, vašupas !, Rahul“

„JavaScript“ pritaikymo, skambinimo ir susiejimo metodai

Bet kuriam „JavaScript“ kūrėjui būtina suprasti skirtumą tarp skambutis, kreiptisir įpareigoti metodai. Trys funkcijos yra panašios tuo, kad jų pirmasis argumentas visada yra „ši“ reikšmė arba kontekstas, kurį norite suteikti funkcijai, kuria kviečiate metodą.

Iš trijų skambutis yra lengviausia. Tai tas pats, kas iškviesti funkciją, nurodant jos kontekstą. Štai pavyzdys:

var user = {

pavadinimas: "Rahul Mhatre",

whatIsYourName: funkcija () {

console.log (this.name);

     }

};

vartotojas.whatIsYourName (); // Rezultatas: „Rahul Mhatre“,

var user2 = {

pavadinimas: "Neha Sampat"

};

user.whatIsYourName.call (vartotojas2); // Rezultatas: „Neha Sampat“

Prisimink tai kreiptis yra beveik tas pats kaip skambutis. Skirtumas tik tas, kad argumentus perduodate kaip masyvą, o ne atskirai. Masyvus lengviau valdyti „JavaScript“, atveriant daugiau galimybių dirbti su funkcijomis. Čia yra pavyzdys naudojant kreiptis ir skambutis:

var user = {

pasisveikink: "Sveiki!",

greetUser: funkcija (vartotojo vardas) {

console.log (this.greet + "" + vartotojo vardas);

     }

};

var greet1 = {

pasisveikink: "Hola"

};

user.greetUser.call („greet1“, „Rahul“) // Išvestis: „Hola Rahul“

user.greetUser.apply (greet1, ["Rahul"]) // Išvestis: "Hola Rahul"

įpareigoti metodas leidžia perduoti argumentus funkcijai jos neprašant. Nauja funkcija grąžinama su argumentais, esančiais prieš bet kokius kitus argumentus. Štai pavyzdys:

var user = {

pasisveikink: "Sveiki!",

greetUser: funkcija (vartotojo vardas) {

console.log (this.greet + "" + vartotojo vardas);

}

};

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

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

SveikiHola ("Rahul") // Rezultatas: "Hola Rahul"

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

„JavaScript“ atmintinė

Atmintinė yra optimizavimo technika, kuri paspartina funkcijos vykdymą, saugant brangių operacijų rezultatus ir grąžinant talpyklos rezultatus, kai vėl atsiranda tas pats įvesties rinkinys. „JavaScript“ objektai elgiasi kaip asociaciniai masyvai, todėl „Java“ atmintinę lengva įgyvendinti. Pvz., Mes galime konvertuoti rekursinę faktoriaus funkciją į užrašytą faktoriaus funkciją, kaip parodyta žemiau:

function memoizeFunction (func) {

var cache = {};

grąžinimo funkcija () {

var raktas = argumentai [0];

jei (talpykla [raktas]) {

grąžinti talpyklą [raktas];

          }

Kitas {

var val = func.apply (tai, argumentai);

talpykla [raktas] = val;

grįžtamasis val;

          }

  };

}

var fibonacci = memoizeFunction (funkcija (n)

grąža (n === 0);

„JavaScript“ metodo perkrovimas

Metodo perkrova leidžia keliems metodams turėti tą patį pavadinimą, bet skirtingus argumentus. Kompiliatorius ar vertėjas nustato, kurią funkciją iškviesti, remdamasis perduotų argumentų skaičiumi. Metodo perkrovimas nėra tiesiogiai palaikomas „JavaScript“. Bet jūs galite pasiekti kažką panašaus į tai, kaip parodyta žemiau:

function overloadMethod (objektas, vardas, fn) {

jei (! object._overload) {

object._overload = {};

     }

jei (! objektas. perkelkite [vardas]) {

object._overload [vardas] = {};

    }

jei (! objektas. perkelkite [vardas] [fn.length]) {

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

    }

objektas [vardas] = funkcija () {

jei (this._overload [vardas] [argumentai.length])

grąžinkite šį._ perkelkite [vardas] [argumentai.lgumas] .pritaikykite (tai, argumentai);

     };

funkcija Studentai () {

overloadMethod (tai, „rasti“, funkcija () {

// Raskite mokinį pagal vardą

  });

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

// Raskite mokinį pagal vardą ir pavardę

  });

}

var studentai = nauji studentai ();

studentai.rasti (); // Randa visus

studentai.rasti („Rahul“); // Randa mokinius pagal vardą

studentai.rasti („Rahul“, „Mhatre“); // Randa vartotojus pagal vardą ir pavardę

Gerai išmanydami „Node.js“, pastebėsite, kad yra daugybė būdų, kaip išspręsti beveik kiekvieną problemą. Tačiau labai svarbu laikytis tinkamo požiūrio. Neteisingas požiūris sukels daugybę šalutinių reiškinių, tokių kaip netaisyklingos ar bugiškos programos ar regresijos, priversiančios perrašyti visą logiką. Iš kitos pusės, tinkamas požiūris padės tvirtą, efektyvų ir keičiamą pritaikymą.

10 šiame straipsnyje aprašytų „JavaScript“ sąvokų yra pagrindai, kuriuos turėtų žinoti kiekvienas „Node.js“ kūrėjas. Bet jie yra ledkalnio viršūnė. „JavaScript“ yra galingas ir sudėtingas. Kuo daugiau jo naudosite, tuo daugiau suprasite, kokia iš tikrųjų yra „JavaScript“. Geresnis tokios plačios kalbos supratimas tikrai padės išvengti klaidų. Tuo tarpu gerai išmokite pagrindus ir pamatysite puikių rezultatų.

Rahul Mhatre yra „Software AG“ kūrėjų komandos vadovas. Anksčiau jis buvo „Built.io“, kurį įsigijo „Software AG“, techninis architektas.

Naujųjų technologijų forumas suteikia galimybę tyrinėti ir aptarti besiformuojančios įmonės technologijas beprecedentiame gylyje. Atranka yra subjektyvi, atsižvelgiant į mūsų pasirinktas technologijas, kurios, mūsų manymu, yra svarbios ir labiausiai domina skaitytojus. nepriima rinkodaros užtikrinimo priemonės paskelbimui ir pasilieka teisę redaguoti visą pateiktą turinį. Visus klausimus siųskite adresu [email protected].

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