Programare funcțională în Javascript

Sokolov - Tomsk

30.000 - 65.000 de ruble.

...Necesar programatorpentru o pornire (bază de date a escrocilor din toată Rusia). Arhitectură: Server... ...site (front-end) în PHP / VueJS sauJava.Cunoștințe necesare: CSS, Html... ...Boot, Hibernate) Android, iOSJavaScriptBaze de date (Postgres, Mysql)...

acum 26 de zile

Cernețov Anton Konstantinovici - metrou Grădina Botanică, Moscova

60.000 de ruble.

...sistem automatizat(PLM, CRM, EDI). Instalare, depanare, scriere de extensii pentru sisteme corporative. ScrisJava cod și JavaScript.Depanarea unei aplicații web mari (JavaEE, Tomcat, JSP, JavaScript). Crearea unei scheme de baze de date Cerințe:...

acum 26 de zile

SRL Central Kassa- Perm

50.000 - 120.000 de ruble.

...sarcini complexe și interesante pentru dezvoltarea soluțiilor moderne de plată. Acum folosim un număr mare de tehnologii: ·Java8, Spring (+Spring Boot), Redis, Wildfly, PostgreSql, TestNg și Mockito. · Maven, Git, Youtrack, Upsource. Alăturarea noastră...

acum 9 zile

GC Safe Logic - stația de metrou Semyonovskaya, Moscova

...Căutăm angajați activi, orientați spre obiective, orientați spre rezultate.Programator JavaScriptpentru dezvoltarea proiectelor folosind ExtJS 6 și o versiune ulterioarăJava1.8 Spring Framework (Core, Date, Web, Securitate, Boot etc.) MySQL PostgreSQL, PostGIS...

acum 8 zile

JCat, serviciu de plasare de anunțuri - Stația de metrou Mayakovskaya, Sankt Petersburg

35.000 de ruble.

...principalele tehnologii web: Php5+, jQuery, Html, Css, aspect cross-browser. Cunoașterea PHP7 va fi un mare plus,JavaScriptAngularJs, Html5, MySql, Ajax.Java(Jse, Jee). Responsabilitate de primăvară, acuratețe, eficiență, creativitate; independenţă...

acum 9 zile

Eşalon-Nord-Vest - Stația de metrou Vasileostrovskaya, Sankt Petersburg

...aplicații web corporative și aplicatii mobile pentru Android și iOS. Căutăm un dezvoltator cu cunoștințe de C++/Qt/JavaScript/Javacu perspectiva dezvoltării în direcţia dezvoltării Web. Vom fi bucuroși să comunicăm atât cu profesioniști consacrați, cât și...

acum 20 de zile

Compania Unită RUSAL - metrou Park Pobedy, Moscova

...UC RUSAL invită candidați pentru posturi vacanteProgramator Java.Responsabilitati: Dezvoltare, intretinere si modificare software... ...programare; Cunoștințe de bază XML, HTML, CSS,JavaScriptAjax, SOAP, WSDL; Cunoștințe sigure Java2 SE/Java 2 EE;...

acum 13 ore

Finstarlabs - Rumyantsevo, Moscova

100.000 - 150.000 de ruble.

...Responsabilitati: 1. Web si aplicații server peJavafolosind Spring, Hibernate, AngularJS, Servicii Web, SGBD... ...Experiență în dezvoltare pentru Unix/Linux (de dorit); 5. bune cunoștințeJavaScript;6. experiență de dezvoltare folosind AngularJS (ember.js, KnockoutJS...

acum 14 ore

Bell Integrator - Moscova

...Teste de scriere. Cerințe: Nivel inalt nucleu de cunoștințeJavaScript;Cunoștințe TypeScript, React, ES6 Cerințe preferate:... ...experiență cu Ember, Vue.js sau AngularJS, precum și cunoștințeJava,C# sau orice alt „adult” orientat pe obiecte...

acum 26 de zile

Frolov Nikolay - Rostov-pe-Don

40.000 - 100.000 de ruble.

...Loc de munca vacant Programator Java(sau un programator C# gata să termene scurte trece la Java) într-una dintre cele mai mari întreprinderi din capitala de sud... ..., Interbase, Firebird etc. Tehnologii web: html,javascript,jquery, cadru de arc. Sisteme de control al versiunilor: Git...

acum 10 zile

Metallinvestbank- Voronej

150.000 de ruble.

...Dezvoltarea unei platforme interne de dezvoltare a afacerii Cerinte: CunostinteJava,Arc; Cunostinte in SQL; Înțelegerea proceselor de dezvoltare a aplicațiilor web și a modului în care funcționează REST. CunoştinţeJavascript/Jquery sau biblioteci front-end similare ar fi un mare plus. (Nu...

acum 9 zile

Grupul de companii "ISERV"- Ceboksary

2.001 RUB/an

...Locuințe și servicii comunale, instituții de învățământ și medicale invităProgramator JavaScript(ReactJS) în prezent, din cauza extinderii teritoriului... ...Interogări T-SQL; Cunoașterea oricărei limbi de server (javapython, ruby, C#). Oferim: Oportunitate...

acum 26 de zile

TEZ TOUR - Moscova

150.000 de ruble.

...Dezvoltarea arhitecturii soluției platformei și module software peJavaDezvoltarea aplicaţiilor de integrare Dezvoltarea şi... ...Cunoștințe SQL Cunoștințe XML și JSON Cunostinte de baza HTML, CSS,JavaScriptExperiență în muncă – minim 1 an Limba engleză- pe...

acum 18 zile

Centru Tehnologia Informatiei - Stația de metrou Dynamo, Ekaterinburg

60.000 de ruble.

...Compania Information Technology Center invităprogramatori javapentru a dezvolta informații regionale sistem medical ... ...Experiență ORM dezvoltare web aplicații (HTML, CSS,JavaScript)Experiență cu DBMS Oferim: Lucru în...

acum 19 zile

Severstal, Moscova- Cherepovets

...deveni; Participarea la proiectele de implementare a sistemului Hybris caJavadezvoltator. Cerinte: Experienta (de la un an) cu... ...lucru (peste un an) cu Spring MVC; Experiență cu HTML/CSS/JavaScript(jQuery, Dojo etc.); Experiență cu servicii web (REST/SOAP...

acum 10 zile

TANDEM - Ekaterinburg

65.000 - 85.000 de ruble.

...Compania TANDEM invităprogramatori la pozitia de mijloc Javadezvoltator „și grupului de dezvoltare. Munca în această poziție implică stăpânire... ...SQL. Cunoștințe HTML, experiență de dezvoltare în utilizareJavaScriptÎnțelegerea sau experiența cu tehnologia Ajax. Cunoștință...

Dezvoltarea web este una dintre cele mai simple și, prin urmare, populare domenii în rândul programatorilor începători. Oricine este suficient pentru a lucra editor de textși browser, nu este nevoie să studiați algoritmii la un nivel avansat, rezultatul fiecărei etape de scriere a unui program este clar - în general, există multe avantaje. O abilitate cheie în contextul dezvoltării web este cunoașterea JavaScript.

În zilele noastre, JavaScript se dezvoltă foarte repede și, prin urmare, este ușor să fii confuz atunci când înveți limba. Vă aducem în atenție programă cu o structură convenabilă care acoperă toate aspectele necesare ale JavaScript și tehnologiilor conexe.

De ce JavaScript?

Este demn de remarcat deschiderea limbajului - companiile care de obicei concurează între ele colaborează pentru a dezvolta JavaScript. Limbajul este foarte flexibil și se va potrivi cu suporterii atât abordărilor orientate pe obiect, cât și funcționale. Un număr mare de biblioteci și cadre facilitează rezolvarea oricărui tip de problemă, iar platforma serverului Node.js face posibilă utilizarea limbajului nu numai în browser, ci și în consolă. Puteți chiar să scrieți aplicații desktop și mobile: primele utilizând framework-ul Electron, iar cele din urmă folosind NativeScript sau React Native.

Bazele

Mai întâi trebuie să înveți conceptele de bază ale JavaScript, dezvoltarea web și programarea în general:

  • JS orientat pe obiect - constructori și fabrici, moștenire;
  • JS funcțional - funcții de ordin superior, închideri, recursivitate;
  • Specificații de testare Jasmine;
  • elementele de bază ale HTML, CSS și jQuery.

Git

Git este un instrument esențial pentru dezvoltatori, așa că începeți cu el cât mai curând posibil. Iată abilitățile de bază pe care ar trebui să le aveți:

  • crearea și mutarea fișierelor în directoare;
  • inițializare și comitere în Git;
  • configurarea depozitelor în GitHub.

Algoritmi și structuri de date

Apoi, merită să studiem algoritmii (în special, conceptul de complexitate a algoritmilor), precum și structuri de bază date: liste legate, cozi, stive, arbori binari de căutare și tabele hash. Acest lucru vă va ajuta.

Backend

Node.js

Acum 10 ani JavaScript putea fi folosit doar pentru dezvoltarea front-end. Acum, datorită lui Node.js, problema nu se limitează la un singur „front”. Node este pur și simplu un mediu pentru rularea codului JS pe partea de server, așa că nu va trebui să învățați nicio sintaxă nouă, dar va trebui să importați și să exportați fișiere, să modularizați codul și să utilizați managerul de pachete npm.

Servere, HTTP, Express.js

După ce ați învățat Node, merită să vă continuați cunoștințele cu dezvoltarea backend și să înțelegeți serverele și rutarea. Puteți începe cu porturi și protocoale cu accent pe HTTP, apoi puteți trece la Express, o bibliotecă Node pentru procesarea cererilor.

JavaScript asincron

Baze de date, scheme, modele și ORM-uri

Bazele de date sunt unul dintre cele mai importante elemente ale dezvoltării web. Dacă aplicația dvs. trebuie să încarce sau să stocheze date care nu se pierd atunci când pagina este reîmprospătată, va trebui să utilizați o bază de date. Trebuie să înveți să faci distincția între bazele de date relaționale și non-relaționale și să înțelegi tipurile de relații. Apoi cunoașteți diferiți oameni. De asemenea, capacitatea de a lucra cu ORM nu va fi de prisos.

În față

HTML și CSS

HTML și CSS sunt baza oricărui dezvoltator web. Nu trebuie să le cunoști perfect, dar ar trebui să le înțelegi. De asemenea, puteți explora o bibliotecă populară (de exemplu, Bootstrap) și un preprocesor CSS precum Sass - va ajuta să faceți CSS să arate ca un cod obișnuit. Pentru a simplifica lucrul cu HTML, puteți alege unul dintre motoarele de șabloane populare, de exemplu, pug.

jQuery și manipularea DOM

După ce a creat aspectul paginii cu Ajutor HTMLși CSS, veți folosi și biblioteca jQuery pentru a manipula DOM. Mulți oameni cred că jQuery este inutil și va fi înlocuit în curând de Angular și React, dar este nebun de popular și, prin urmare, merită cunoscut. În plus, într-o zi vă veți găsi într-o situație în care vă va fi incomod să bateți cuie cu un microscop React, iar apoi jQuery ușor vă va veni în ajutor.

Instrumente pentru dezvoltatori Chrome

Ar fi de neiertat să neglijăm instrumentele Chrome pe care le oferă o cantitate mare oportunități. Cu ele puteți examina elementele DOM, puteți depana prin consolă, puteți urmări rute și multe altele. Sunt descrise mai multe caracteristici convenabile Consola Chrome, ceea ce va simplifica executarea sarcinilor de rutină.

AJAX

Dacă doriți ca aplicația dvs. să nu reîncarce paginile după fiecare operațiune a bazei de date, veți avea nevoie cu siguranță de AJAX - trimite solicitări HTTP asincrone de fundal, răspunsurile la care actualizează doar o parte a afișajului. Puteți lucra cu AJAX prin jQuery folosind metoda .ajax.

Subiecte avansate

Dezvoltare bazată pe teste

Sau TDD este o tehnică de dezvoltare în care crearea de software este împărțită în mai multe cicluri mici: mai întâi se scriu teste care acoperă modificarea dorită, apoi se scrie cod care trece aceste teste. După aceasta, codul este refactorizat și sunt scrise noi teste dacă este necesar. Dacă o secțiune de cod eșuează unele teste, aceasta este corectată.

Websocket-uri

Acest subiect merită atenție Atentie speciala deoarece sunt foarte utile. Protocolul WebSocket, spre deosebire de HTTP, permite fluxul de date bidirecțional, ceea ce face ca această tehnologie să fie unică. Cea mai comună implementare este biblioteca socket.io - înțelegerea acesteia și aplicarea în practică a abilităților dobândite vă va ajuta să creați un joc de browser multiplayer.

ES6, Babel, Webpack

În prezent, standardul principal este ES6 (ES2015), dar ES2016 a fost deja adoptat și ES2017 este în curs de dezvoltare, așa că trebuie să fii mereu la curent cu actualizările și să le folosești. Problemele de compatibilitate pot fi rezolvate cu doar câteva instrumente:

  • Babel - compilează codul ES6 (suport ES2016 în curând) în ES5, care este acceptat de toate browserele. Știe chiar să compileze componente JSX/React, ceea ce îl face indispensabil oricărui dezvoltator web;
  • Webpack - colectează tot fișiere sursă(imagini, fonturi, foi de stil, fișiere JS etc.) într-un singur grafic de dependență. Nu va fi util atunci când creați aplicații mici, dar atunci când lucrați cu React ajutorul său este de neprețuit.

React și Redux

React - o bibliotecă pentru creare interfețe cu utilizatorul. Ea a fost creată de Facebookîn 2013 și a devenit rapid popular în rândul dezvoltatorilor. Ar trebui să citiți și apoi să dezasamblați pentru a înțelege cum funcționează React și ce face. React este util nu numai pentru dezvoltarea front-end: Facebook a lansat versiuni ale framework-ului pentru mobil (React Native) și dezvoltare VR (React VR).

Redux este un container de stare previzibil folosit în mod obișnuit împreună cu React. Poate fi folosit pentru a scurta codul datorită modularității sale. Deosebit de util în timp real, aplicații multi-utilizator, cum ar fi jocuri.

Autentificare, sesiuni, cookie-uri

De asemenea, ar trebui să înțelegeți cum interacționează aplicațiile cu utilizatorii, procesați autentificarea contși ies din el, ei acordă privilegii. Cookie-urile sunt folosite pentru a urmări identitatea utilizatorului în timpul sesiunii – cele mici. fișiere text, trimis de server către browser ca răspuns la o solicitare HTTP. Și pentru a asigura conexiunea dintre baza de date și paginile de autorizare, puteți utiliza biblioteca expres-sesiune.

Securitate web

Și, în sfârșit, ar trebui să acordați atenție siguranței. Este important să înveți atât metodele de atac, cât și modalitățile de a te apăra împotriva lor.

Am întocmit o listă de întrebări, răspunsurile la care ar trebui să le cunoască nu numai fiecare dezvoltator JavaScript, ci, poate, orice programator.

Care sunt cele mai importante două paradigme de programare pentru un dezvoltator JavaScript?

JavaScript este un limbaj multi-paradigmă care acceptă programarea imperativă/procedurală împreună cu OOP și programarea funcțională. JS acceptă OOP cu moștenire prototipică.

Este indicat sa mentionati:

1. Moștenirea prototipului (de asemenea: prototipuri, referințe la obiecte)

2. Programare funcțională (de asemenea: închideri, funcții de primă clasă, lambda)

Evita:

Habar n-ai despre paradigme, nu menționa OOP prototip sau programare functionala.

Ce este programarea funcțională?

Programarea funcțională implică calcularea functii matematice, evitând stările partajate și datele mutabile. Lisp (specificat în 1958) este unul dintre primii limbaje funcționale programare și este puternic inspirată de calculul lambda. Lisp și limbi similare sunt încă utilizate pe scară largă astăzi.

Programarea funcțională este unul dintre conceptele fundamentale ale JavaScript (unul dintre cei doi piloni ai JS). niste utilități funcționale au fost adăugate la JavaScript în ES5.

Bine de menționat:

1. Funcții pure/puritatea funcțiilor

2. Evitarea efectelor secundare

3. Set simplu de funcții

4. Exemple de limbaje funcționale: Lisp, ML, Haskell, Erlang, Clojure, Elm, F Sharp, OCaml etc.

5. Caracteristici pe care le suportă programarea funcțională: funcții de primă clasă, funcții de ordin superior, funcții ca argumente/valori

Evita:

1. Nu se menționează funcțiile pure / evitarea efectelor secundare

2. Eșecul de a furniza exemple de limbaje funcționale

3. Eșecul de a furniza exemple de funcționalități JavaScript

Care este diferența dintre moștenirea de clasă și prototip?

Moștenirea de clasă: instanțele sunt moștenite din clase, se creează relații de subclasă (sistematizarea ierarhică a claselor). Instanțele sunt implementate prin constructorul de funcții, prin noul descriptor. O instanță a unei clase nu poate conține un descriptor de clasă din ES6.

Moștenirea prototipului: Instanțele moștenesc direct de la alte obiecte, sunt implementate prin fabrici sau Object.create(), iar instanțele pot fi compuse din multe obiecte diferite pentru a facilita moștenirea selectivă. Moștenirea prototipului este mai simplă și mai flexibilă decât moștenirea de clasă.

Bine de menționat:

1. Clase: legături strânse, ierarhie

2. Prototipuri: moștenire concatenativă, delegare, moștenire funcțională, compoziție

Evita:

Eșecul de a sublinia avantajele moștenirii prototipice față de moștenirea de clasă

Care sunt avantajele și dezavantajele programării funcționale și orientate pe obiecte?

Avantajele OOP: Un concept ușor de înțeles despre obiecte și metode de apelare. OOP tinde să folosească un stil imperativ mai degrabă decât un stil declarativ, care este citit ca un set direct de instrucțiuni ale mașinii.

Dezavantajele OOP: de regulă, există o dependență de condițiile generale. Obiectele și comportamentul lor sunt legate de o singură entitate, care poate fi accesată accidental de orice număr de funcții într-o ordine nespecificată, ceea ce poate duce la un comportament imprevizibil, cum ar fi o condiție de rasă.

Avantajele FP: se folosește o paradigmă funcțională pentru a evita condițiile comune și efectele nedorite, iar erorile posibile din cauza funcțiilor concurente sunt eliminate. Datorită caracteristicilor precum programarea implicită, funcțiile tind să fie radical simplificate și ușor de restructurat pentru a reutiliza codul mai ușor decât OOP.

Calculul folosind funcții pure se extinde cu ușurință pe mai multe procesoare sau pe clustere de calcul distribuite, fără teama de conflict de resurse.

Dezavantajele FP:Încrederea excesivă pe abordări funcționale, cum ar fi programarea implicită, poate duce la scăderea lizibilității codului, făcând codul rezultat mai abstract, concis și mai puțin specific.

Mai des, oamenii sunt mai familiarizați cu OOP și abordare imperativă, așa că unele expresii de programare funcționale comune pot fi provocatoare pentru începători.

Programarea funcțională are o curbă de învățare mai abruptă decât OOP, care este mai populară și mai ușor de învățat. Conceptele FP sunt adesea descrise cu expresii și notații din calculul lambda, algebră și teoria categoriilor, necesitând cunoștințe de bază ale acestor domenii pentru a le înțelege.

Bine de menționat:

1. Probleme de conditii generale, comportament nedorit

2. Posibilitățile FP de a simplifica radical codul programului

3. Diferența de dificultate de învățare

4. Efecte secundareși impactul acestora asupra fiabilității programului

5. Dificultatea schimbării și fragilitatea generală a bazei de cod OO în comparație cu cea din stilul funcțional

Evita:

Ca să nu mai vorbim de dezavantajele uneia dintre abordări - toți cei care au întâlnit una dintre ele știu despre alte câteva dezavantaje

Când este moștenirea de clasă o alegere potrivită?

Intrebare capcana. Răspunsul corect nu este niciodată. Compoziția este o abordare mai simplă și mai flexibilă decât moștenirea de clasă.

Bine de menționat

„... compoziția obiectului este mai bună decât moștenirea de clasă”

Evita:

Mențiunea componentelor Rect. React.js folosește descriptorul de clasă, dar nu evită capcanele moștenirii clasei. Spre deosebire de răspunsurile populare, nu trebuie să folosiți o clasă pentru a utiliza React. Un astfel de răspuns va arăta o lipsă de înțelegere a ambelor clase în JavaScript și React.

Când este mai bine să folosiți moștenirea prototipică?

Există mai mult de un tip de moștenire prototip:

1. Delegare (lanț de prototipuri)

2. Concatenare (mixins, Object.assign())

3. Moștenirea funcțională (a nu se confunda cu programarea funcțională. O funcție este folosită pentru a crea o închidere pentru privat/încapsulare)

Răspuns bun:

1. În situațiile în care modulele sau programarea funcțională nu oferă o soluție evidentă

2. Când trebuie să colectezi un obiect din mai multe surse

3. În orice caz când trebuie să folosiți moștenirea

Evita:

1. Neștiind când sunt folosite prototipurile

2. Nu știu despre mixin sau Object.assign()

Ce înseamnă „compoziția obiectului este mai bună decât moștenirea de clasă”?

Acesta este un citat din cartea „Design Patterns: Elements of Reusable Object-Oriented Software”. Reutilizați codul ar trebui realizat prin asamblarea unor mici unități de funcționalitate în obiect nou mai degrabă decât prin moştenirea claselor şi crearea ierarhiilor.

Bine de menționat:

1. Evitarea moștenirii și a legăturilor strânse

2. Evitarea problemei „banane/maimuțe” care decurge din moștenirea clasică (aveai nevoie de o banană - ai o maimuță care ține o banană în mijlocul junglei)

Evita:

Nu numiți niciuna dintre problemele menționate mai sus. Nu reușește să explice diferența dintre compoziție și moștenire sau nu reușește să comunice beneficiile compoziției.

Ce este comunicarea de date bidirecțională și fluxul de date unidirecțional și care este diferența dintre ele?

Comunicarea bidirecțională a datelor implică faptul că câmpurile de interfață sunt legate dinamic de modelul de date, adică atunci când câmpurile de interfață se schimbă, modelul se schimbă și invers.

Fluxul de date unidirecțional înseamnă că numai modelul este sursa adevărului. Modificările aduse interfeței declanșează mesaje care semnalează utilizatorului intenția modelului (sau „stocare” în termenii React). Ideea este că datele curg întotdeauna în aceeași direcție, făcându-le mai ușor de înțeles.

Fluxurile de date unidirecționale sunt deterministe, în timp ce legarea bidirecțională poate provoca efecte nedorite care sunt mai greu de urmărit și de înțeles.

Bine de menționat:

1. React este noul exemplu canonic de flux de date unidirecțional, așa că menționarea React este o idee bună. Cycle.js este o altă implementare populară a fluxului de date unidirecțional.

2. Angular este un cadru popular care folosește legarea în două sensuri.

Evita:

Lipsa de înțelegere a acestor concepte, incapacitatea de a explica diferența dintre ele.

Care sunt avantajele și dezavantajele arhitecturii monolitice și ale microserviciilor?

Arhitectura monolitică înseamnă că aplicația dvs. este scrisă ca un singur bloc coeziv de cod ale cărui componente sunt proiectate colaborareși utilizarea resurselor partajate.

Abordarea microserviciilor implică faptul că o aplicație constă din multe aplicații mici, independente, care pot rula cu propriile resurse și potenţial cantitati mari mașini individuale.

Avantajele arhitecturii monolitice: Principalul avantaj al unei arhitecturi monolitice este că majoritatea aplicațiilor tind să aibă mai multe probleme comune cum ar fi înregistrarea, limitarea vitezei și nevoia de caracteristici de securitate – în aplicație unică sunt mai ușor de rezolvat pentru fiecare componentă.

Contra unei aplicații monolitice: Deoarece toate componentele sunt strâns legate între ele, pe măsură ce aplicația se dezvoltă, devine mai dificil de înțeles și apar multe dependențe și efecte secundare neevidente.

Avantajele microserviciilor: microservicii sunt de obicei mai bine organizate, deoarece fiecare componentă își îndeplinește propria sarcină și funcționează independent de orice altă componentă. O aplicație bazată pe componente izolate este, de asemenea, mai ușor de reconfigurat și schimbat.

Dezavantajele microserviciilor: la crearea unui nou microserviciu, pot apărea multe probleme bruște, care nu erau așteptate în timpul proiectării. Pentru o aplicație monolitică, puteți utiliza un middleware software pentru a rezolva diverse probleme transversale fără prea mult efort.

O arhitectură de microservicii fie va necesita supraîncărcarea modulelor separate pentru fiecare problemă de la capăt la capăt, fie va trebui să le încapsuleze într-un alt nivel de servicii prin care trece tot traficul.

La urma urmei, chiar și arhitecturile monolitice tind să direcționeze traficul prin stratul de serviciu exterior, dar cu o arhitectură monolitică puteți amâna costul acestei lucrări până când proiectul este mai matur.

Microserviciile sunt adesea implementate pe cont propriu mașini virtuale sau containere, ceea ce duce la crestere rapida numărul de conflicte pe resurse virtuale.

Bine de menționat:

1. În ciuda costului inițial ridicat, microservicii beneficiază de termen lung datorita scalarii mai bune

2. Diferențele practice între microservicii și aplicațiile monolitice

Evita:

1. Ignoranța diferențelor de arhitectură

2. Ignoranța dezavantajelor microserviciilor

3. Subestimați beneficiile scalării microserviciilor

Ce este programarea asincronă și de ce este importantă în JS?

Programarea sincronă înseamnă că, cu excepția condițiilor și a apelurilor de funcții, codul este executat secvențial de sus în jos, zăbovând în sarcini lungi, cum ar fi solicitările de rețea și citirea/scrierea pe disc.

Programarea asincronă înseamnă că atunci când este necesară o operațiune de blocare, cererea este trimisă și codul continuă să ruleze fără blocare până când așteaptă un rezultat. Când răspunsul este gata, se declanșează o întrerupere, ceea ce face ca handlerul de evenimente să ruleze și fluxul de control continuă. Astfel, un fir de program poate gestiona multe operații paralele.

Interfețele de utilizator sunt de natură asincronă, petrecând cea mai mare parte a timpului așteptând intrarea utilizatorului pentru a rupe bucla și a rula handler-ul.

Node.js este asincron în mod implicit, în esență serverul își petrece timpul într-o buclă așteptând o solicitare de rețea.

În JavaScript, acest lucru este important deoarece este natural pentru interfețe și are un efect pozitiv asupra performanței serverului.

Bine de menționat:

1. Semnificația încuietorilor, impactul asupra performanței

2. Înțelegerea manipulatorilor și de ce sunt importanți pentru interfețe

Evita:

1. Neînțelegerea termenilor de sincronie și asincronie

2. Neidentificarea consecințelor performanței

Javascript este un limbaj în continuă evoluție, mai ales acum că există un program anual de actualizări ale specificației ECMAScript. Acest lucru face ca cunoașterea Javascript dincolo de jQuery să fie din ce în ce mai importantă.

Desigur, în acest articol nu vom putea acoperi toate cunoștințele necesare. Cu siguranță, vor exista puncte pe care le-am omis, poate m-am înșelat, sau opiniile noastre cu privire la set necesar cunoștințele se vor dispersa.

Având în vedere aceste aspecte, să începem...

Ce este testul FizzBizz

FizzBizz este de obicei un mic test care vizează eliminarea dezvoltatorilor neexperimentați. Cred că vei fi surprins cât de mult dezvoltatori javascript Ei nu știu să scrie astfel de teste.

De regulă, astfel de teste nu au prea multă semnificație. Acesta are ca scop doar testarea abilităților potențialilor candidați.

Amintiți-vă, există șanse foarte mari să vi se solicite să susțineți un astfel de test într-un interviu.

Exemplu de test clasic FizzBizz:

Opțiunile pentru astfel de teste sunt nesfârșite. Odată, în timpul unui interviu, m-am confruntat cu un astfel de test, după care a trebuit să rezolv încă două variante.

Pentru (var i = 1; i<= 100; i++) { if (i % 15 == 0) { console.log("FizzBuzz"); } if (i % 3 == 0) { console.log("Fizz"); } if (i % 5 == 0) { console.log("Buzz"); } }

Diferența dintre == și ===

Probabil că sunteți familiarizat cu ambii operatori de comparație. Cu toate acestea, știți exact cum diferă acești operatori? Javascript Linter vă cere să utilizați operatorul ===, v-ați întrebat vreodată de ce?

Nu compară tipurile de operanzi, ci le transformă în același tip. Această operațiune are o reputație negativă.

Console.log(24 == "24"); // Adevărat

După cum puteți vedea, valoarea șirului 24 (între ghilimele simple) a fost turnată într-un tip întreg. Desigur, există situații în care acest lucru este exact ceea ce doriți, dar de cele mai multe ori nu veți dori ca operatorul de comparație să manipuleze tipurile de date. Compararea datelor folosind operatorul == nu este recomandată pentru majoritatea sistemelor de verificare a stilului de cod javascript vă va arăta această eroare.

=== (comparație strictă) compară tipurile de date fără a le converti într-un singur tip, adică datele vor fi comparate așa cum sunt. De asemenea, din moment ce această operațiune nu presupune turnarea tip, funcționează mai rapid. Astfel, pentru ca acest operator să funcționeze corect, sunt necesari operatori de același tip.

Același exemplu, dar cu operatorul ===

Console.log(24 === „24”); // fals

Primim ca răspuns fals, deoarece operanzii sunt de diferite tipuri, unul dintre ei este un tip întreg, iar al doilea este un șir.

Cum să selectați elementele DOM fără biblioteci suplimentare

Cu siguranță știți cum să selectați elemente folosind jQuery, dar puteți face același lucru, dar fără ajutorul acestei biblioteci?

Nu mă refer doar la selectarea unui element cu un anumit ID sau un set de clase, mă refer la expresii pentru găsirea elementelor folosind jQuery.

Există mai multe metode native pentru a găsi elemente în DOM care sunt la fel de bune ca jQuery. De asemenea, putem folosi selectoare precum primul copil, ultimul copil etc.

Să aruncăm o privire la câteva dintre aceste metode.

  • document.getElementById este o metodă clasică de găsire a elementelor după ID-ul lor.
  • document.getElementsByClassName - selectarea elementelor după valoarea câmpului className
  • document.querySelector este o metodă grozavă care înlocuiește aproape complet selectorul $() al jQuery, dar este deja inclusă în Javascript. Singura diferență este că returnează doar primul element găsit.
  • document.querySelectorAll - similar cu metoda anterioară, dar returnează o matrice de elemente găsite.
  • document.getElementsByTagName - Această metodă vă va ajuta să selectați elemente după numele etichetei. Dacă trebuie să găsiți toate elementele div, atunci aceasta este metoda de care aveți nevoie.

De asemenea, aș dori să remarc că metodele querySelector și querySelectorAll pot fi utilizate nu numai pe întregul document, ci și pe elemente individuale, adică puteți face o selecție într-un element părinte.

Consultați documentația mozilla pentru o descriere completă a acestor metode.

Ridicarea declarațiilor de variabile și funcții

Javascript este interesant în modul în care gestionează variabilele și funcțiile declarate, toate acestea fiind ridicate automat în partea de sus a domeniului de aplicare. În acest fel, le puteți accesa înainte ca acestea să fie declarate în domeniul de aplicare (de exemplu, funcțiile din javascript au propriul domeniu de aplicare).

Prin urmare, pentru a face codul mai ușor de citit, faceți o regulă să declarați ÎNTOTDEAUNA variabile la începutul domeniului. Dacă specificați „utilizați strict” în partea de sus a unui script sau a unei funcții, veți primi o eroare când accesați o variabilă nedeclarată.

Majoritatea instrumentelor de verificare a stilului de cod, cum ar fi Jshint, vă vor da o eroare dacă nu ați folosit „use strict”, așa că dacă încercați să scrieți cod bun, oricum nu veți putea folosi variabile înainte de a fi declarate. Ca întotdeauna, dacă aveți întrebări, vă rugăm să consultați documentația de la mozilla, acolo veți găsi întotdeauna o descriere completă și cuprinzătoare a problemei dvs.

Utilizarea instrumentelor pentru dezvoltatori în browser

Cel mai adesea, astfel de instrumente sunt folosite pentru depanarea scripturilor javascript, dar funcționalitatea lor nu se limitează la aceasta. De exemplu, puteți folosi un punct de întrerupere pentru a executa scriptul pas cu pas, intrând în fiecare funcție în același timp.

Aceste instrumente oferă asistență neprețuită, deoarece puteți monitoriza pe deplin performanța aplicației dvs. și puteți găsi zonele cu probleme.

Învățând să utilizați instrumentele pentru dezvoltatori în browsere precum Chrome, Firefox și cele mai recente versiuni de Internet Explorer, puteți să vă depanați scriptul, să îi măsurați performanța și să găsiți zone în care puteți îmbunătăți algoritmul.

Nu încercați niciodată să depanați codul orbește, analizați-l întotdeauna mai întâi folosind instrumente pentru dezvoltatori. Rezolvarea problemelor care nu există este o pierdere de timp.

Comenzi din consolă

Să trecem la următorul punct în studierea instrumentelor pentru dezvoltatori. De regulă, toate oferă o consolă în care puteți executa interactiv cod Javascript.

Cu siguranță, ești deja familiarizat cu comenzi precum console.log și console.error , dar funcționalitatea consolei nu se limitează la asta.

Aș dori să notez imediat că nu toate comenzile enumerate vor funcționa în toate browserele. Voi încerca să le menționez doar pe cele care funcționează în browserele moderne. Totuși, ca sfat, voi spune că înainte de a le folosi, încercați să verificați singur funcționalitatea lor, pentru a nu aglomera codul în zadar.

  • console.log - folosit pentru a înregistra evenimente. Suporta formatare.
  • console.error - pentru înregistrarea erorilor din cod. Folosesc această comandă atunci când apar erori în solicitările AJAX și în alte zone de cod potențial periculoase. Metoda este similară cu cea anterioară, dar tipărește o listă de apeluri stive.
  • console.dir(obiect) - afișează conținutul formatat al obiectului. De fapt, această metodă este foarte utilă la depanarea codului.
  • console.group(title) - vă permite să creați un grup de mesaje în jurnal cu numele titlu. În acest fel puteți grupa mesajele, de exemplu, după secțiunea de cod în care sunt generate.
  • console.groupCollpased este similar cu comanda anterioară, cu o singură excepție. Și anume, afișează mesajele într-o formă restrânsă.
  • console.groupEnd - încheie un grup creat anterior.
  • console.time(label) - vă permite să urmăriți viteza site-ului în milisecunde. Metoda este utilă în capturarea unor secțiuni de cod potențial complexe.
  • console.timeEnd(label) este un analog al metodei groupEnd, dar funcționează în relație cu console.time().
  • copy(string) - Există o metodă în consola Chrome și Firefox care vă permite să copiați conținutul unui șir în clipboard. O metodă foarte utilă, încercați.

Ce conține exact în asta

Aceasta este în primul rând o mare sursă de probleme pentru cei care nu înțeleg pe deplin ce se află exact în spatele acestui cuvânt cheie. Și este foarte ușor să faci o greșeală în acest sens, deoarece conținutul său depinde în întregime de structura codului.

În limbajele tradiționale de programare, acesta conține o referință la obiectul clasei curente. Dar, deoarece javascript este departe de tradiție, în el această variabilă se referă la obiectul părinte al metodei.

Cel mai simplu mod de a înțelege acest lucru este să ne gândim la acesta ca fiind proprietarul sau părintele metodei. aceasta se referă întotdeauna la părinte, cu excepția cazului în care utilizați metodele de apelare, aplicare sau legare.

În exemplul următor, aceasta se referă la obiectul fereastră:

Funcția myFunction() ( console.log(this === window); // true ) myFunction();

Cu siguranță aveți o întrebare, cum poate fi aceasta egală cu fereastră dacă o accesăm într-o metodă? Dacă știți răspunsul la această întrebare, atunci grozav, în caz contrar citiți mai departe și voi încerca să vă explic.

Când declarați o funcție în acest fel, aceasta este legată de obiectul fereastră globală. Vă amintiți când am spus că aceasta se referă la părintele metodei?

Schimbarea valorii acestuia într-un obiect complet nou (nu fereastră):

Funcția myFunction() ( console.log(this === window); // false ) new myFunction();

Susținătorii purității codului sunt probabil șocați de acest exemplu. Doar zgâriem suprafața aisbergului cu aceste exemple. După cum puteți vedea singur, valoarea acesteia nu mai este egală cu window .

De ce s-a întâmplat?

Cea mai simplă explicație este că în al doilea exemplu am folosit cuvântul cheie nou, creând astfel un nou domeniu și un nou obiect.

În exemplul următor, vom crea un API inactiv pentru a descărca date dintr-o bibliotecă de pe server. Vom crea un obiect API cu unele metode.

Când se folosește cuvântul new , contextul scriptului se mută din contextul ferestrei în contextul API.

Var API = ( getData: function() ( console.log(this === window); // false console.log(this === API); // true ) ); API.getData();

După cum puteți vedea, valoarea acesteia este complet determinată de modul în care este numită metoda. Deoarece funcția este apelată în cadrul obiectului API, părintele său, valoarea acesteia se referă la obiectul API.

Amintiți-vă, valoarea acestui lucru se schimbă. Se schimbă în funcție de cum îl numești, dar dacă folosești metoda bind, valoarea acesteia rămâne aceeași.

Puteți afla mai multe despre acest cuvânt cheie în javascript în articolul Quirksmode și documentația de la Mozilla.

„utilizați strict”;

După cum am indicat mai devreme, user strict este folosit pentru a aplica o versiune mai strictă limbajul java scenariu. Această directivă ar trebui utilizată în toate scripturile.

În mod implicit, javascript este destul de liber în sintaxa sa. Pur și simplu va sări peste secțiunea eronată a codului și va încerca să execute liniile ulterioare fără să vă spună nimic.

Există un articol întreg pe acest subiect în documentația mozilla, vă recomand cu căldură să îl verificați.

Diferite tipuri de cicluri

Veți fi surprinși, dar am întâlnit un număr mare de dezvoltatori care nu știau să folosească corect o buclă for și nu cunoșteau absolut alte tipuri de bucle. Și posibilitatea de a folosi o buclă pe o matrice sau un obiect este o abilitate foarte importantă pentru un dezvoltator. Nu există instrucțiuni clare despre când și ce tip de ciclu să utilizați, dar ar trebui să fiți ghidat în această chestiune. Probabil că ești familiarizat cu pentru și timp, dar ce zici de ceilalți?

Lista buclelor în javascript:

  • pentru..in
  • pentru..de (adăugat în ES6)
  • pentru fiecare
  • in timp ce
  • face în timp ce

pentru buclă

Un ciclu absolut obligatoriu pe care trebuie să-l cunoști și să-l înțelegi. EL își execută corpul când este îndeplinită condiția 2.

Pentru (condiția 1; condiția 2; condiția 3) ( // Codul dvs. )

Condiția 1 - este îndeplinită o dată înainte de începerea unei serii de cicluri. În cele mai multe cazuri, aici veți inițializa contorul de bucle. Acest element poate fi omis dacă ați finalizat inițializarea mai devreme.

Condiția 2 - Această condiție este utilizată pentru a determina dacă se continuă bucla sau nu. Probabil că veți compara contorul cu dimensiunea matricei aici. Dacă valoarea de comparație este adevărată, atunci bucla continuă. Dacă întrerupeți bucla din interior cu pauză, atunci această condiție poate fi omisă.

Condiția 3 - această secțiune este îndeplinită după fiecare iterație, de regulă, aici creșteți contorul.

Pentru... în buclă

Următorul cel mai important tip de ciclu. Cu ajutorul lui poți parcurge toate domeniile clasei.

Să dăm un exemplu.

Var persoană = (prenume: „Dwayne”, prenume: „Charrington”, vârstă: 27, semn stela: „Văsător”); // Bucla de mai jos va scoate: // "Dwayne" // "Charrington" // 27 // "Varsător" pentru (var p în persoană) ( if (person.hasOwnProperty(p)) ( console.log(person[ p]);

Buclă pentru...de

Un tip de buclă destul de nou a fost adăugat în ES6. Datorită noutății sale, nu este acceptat de toate browserele. Dar, cu utilizarea anumitor tehnologii, poate fi folosit astăzi.

Această buclă este exact opusul for...in , iterează prin valorile câmpului și funcționează numai pe tipuri de date care acceptă iterație, ceea ce nu este obiectul.

Var fructe = ["portocală", "măr", "dovleac", "pere"]; pentru (var fruct de fructe) ( console.log(fruct); )

Marele avantaj al acestui tip de buclă este că nu mai trebuie să creăm un pointer și să ținem evidența lungimii matricei pentru a parcurge complet elementele acestuia.

forFiecare buclă

Un alt tip de ciclu, care în profunzimea sa nu este diferit de tipurile de cicluri enumerate anterior.

Funcționează doar cu matrice, nu cu obiecte. Acest lucru este benefic deoarece nu trebuie să creați variabile suplimentare care ajung să vă polueze codul.\

Acesta este probabil cel mai limitat tip de buclă, dar are propriile sale domenii de aplicare despre care ar trebui să știți:

Var fructe = ["măr", "banana", "portocală", "struguri", "pere", "fructul pasiunii"]; // Cele trei valori ale funcției de apel invers sunt: ​​// element - Elementul parcurs // index - Indexul curent al elementului din matrice începând de la 0 // matrice - Matricea parcursă (probabil în cea mai mare parte irelevant) fructe pentruFiecare(funcție(element, index, matrice) ( console.log(index, element); ));

Uneori trebuie doar să iterați prin toate elementele unei matrice și poate să le faceți unele modificări. Comportamentul său este similar cu jQuery.each.

Un dezavantaj al acestui tip de ciclu este că nu poate fi întrerupt. Dacă trebuie să creați o buclă conform regulilor ES5, atunci utilizați metoda Array.every, pe care o puteți găsi în documentația mozilla.

buclă while

Bucla while este similară cu for , dar este nevoie de un singur parametru - condiția în sine, prin care bucla determină dacă să continue iterațiile sau să le oprească.

Deși acest tip de ciclu este considerat cel mai rapid, cred că acest punct este destul de controversat. Cred că nu veți argumenta că acest tip de buclă nu arată mai bine decât altele, iar viteza sa poate fi explicată doar prin simplitatea logicii interne.

Din experiență, o să spun că cea mai rapidă versiune a buclei while este o buclă cu contor de decrementare, o decrești cu unu până ajungi la zero (ceea ce este și discutabil).

Var i = 20; în timp ce (i--) ( console.log(i); )

face...while bucla

Acest ciclu este destul de rar, dar merită totuși să vă familiarizați cu el pentru a înțelege munca lui.

Este posibil ca bucla while să nu completeze o singură iterație. Adică, dacă treceți o valoare falsă ca condiție buclei, atunci nu va fi executată o singură iterație. Bucla do...while este garantată să efectueze cel puțin o operație.

Diferența nu se termină aici. Bucla while procesează condiția înainte de iterație, iar bucla do...while după.

Ca întotdeauna, veți găsi o descriere detaliată a acestui tip de buclă în documentația mozilla.

Metode și sarcini de bază

Există metode de bază în javascript pe care ar trebui să le cunoașteți. Când vine vorba de lucrul cu matrice și șiruri de caractere, javascript oferă un set mare de metode încorporate. Vom atinge doar matrice și șiruri, lăsând obiectele pentru mai târziu.

Dacă sunteți interesat de metode de lucru cu alte tipuri de date, nu ezitați să consultați documentația mozilla. Desigur, nu ar trebui să știi toate aceste metode pe de rost, le voi descrie doar pe cele pe care le consider necesare.

Lucrul cu șiruri

În javascript, cel mai adesea veți lucra cu date șir, cu posibila excepție a matricelor și a obiectelor. Chiar dacă nu lucrezi cu șiruri, sau crezi că nu, merită totuși să cunoști aceste metode.

  • String.replace(regexp | what to replace, what to replace with, callback) - vă permite să înlocuiți o parte dintr-un șir de caractere sunt permise;
  • String.concat(line 1, line 2...) - concatenează mai multe linii într-una singură.
  • String.indexOf(value) - metoda vă permite să găsiți numărul de serie al caracterului părții căutate a șirului, -1 - dacă șirul nu este găsit
  • String.slice(startIndex, endIndex) - returnează secțiunea de șir de la startIndex la endIndex
  • String.split(separator, limit) - împarte șirul într-o matrice după caracter delimitator, limită de lungime maximă.
  • String.subsctr(startIndex, length) - returnează partea din șir care începe cu startIndex cu lungimea lungimii.
  • String.toLowerCase - convertește toate caracterele dintr-un șir în litere mici
  • String.toUpperCase - convertiți toate caracterele șirului în majuscule
  • String.trim - elimină spațiile de la începutul și sfârșitul unui șir

Lucrul cu Arrays

Veți întâlni matrice foarte des. S-au dovedit a fi o modalitate excelentă de a stoca date. Aceste metode merită cu siguranță cunoscute pentru orice dezvoltator de javascript, nu ar trebui să le căutați pe Google.

  • Array.pop - Returnează ultimul element și îl elimină din matrice.
  • Array.shift - Returnează primul element și îl elimină din matrice.
  • Array.push(val1, val2) - adaugă una sau mai multe valori la sfârșitul matricei. Returnează noua lungime a matricei.
  • Array.reverse - inversează ordinea elementelor matricei.
  • Array.sort([Funcția de comparare]) - vă permite să sortați o matrice folosind propria funcție.
  • Array.join(separator) - Returnează un șir format din elemente de matrice separate prin caracterul separator (în mod implicit virgulă).
  • Array.indexOf(valoare) - returnează indexul elementului din matrice, -1 dacă elementul nu este găsit.

Aceasta nu este o listă completă de metode de lucru cu matrice. Puteți găsi altele în documentația mozilla. De la ES6, au fost adăugate câteva metode foarte interesante.

Diferența dintre apel și aplica

Dezvoltatorii confundă destul de des aceste două metode. Puteți face adesea fără ele, dar vă ajută să apelați metode și să schimbați această valoare în timpul execuției.

Diferența dintre ele este foarte mică, dar există. Când utilizați metoda call, puteți specifica un număr infinit de argumente, separate prin virgule.

Cu metoda apply, puteți trece argumente ca o matrice și puteți modifica valoarea acestui .

Dacă trebuie doar să transmiteți o matrice ca argumente unei metode, atunci din ES6 a fost adăugat un operator de răspândire. Nu permite modificarea valorii acestuia. Vă puteți familiariza cu el, ca întotdeauna, în documentația oficială de la mozilla.

Exemplu de apel:

Funcția myFunc() ( console.log(argumente); ) myFunc.call(this, 1, 2, 3, 4, 5);

Exemplu de aplicare:

Funcția myFunc() ( console.log(argumente); ) myFunc.call(null, );

Introducere în biblioteci și cadre

Astăzi, cei mai noti reprezentanți ai cadrelor javascript sunt AngularJS, React.js și Ember. Desigur, există o serie de altele.

Pe măsură ce aplicațiile web devin din ce în ce mai mari, aceste biblioteci fac lucrul cu ele mai ușor. Merită să înțelegeți că acum cunoașterea jQuery singură nu este în mod clar suficientă. Cele mai multe posturi vacante indică cunoștințele despre biblioteci javascript suplimentare ca o cerință de bază.

Node.js

Fără îndoială, Node.js are o poziție puternică. Aproape orice instrument front-end este construit pe node.js și folosește npm (managerul de pachete de noduri), dacă nu sunteți familiarizat cu el, vă sfătuiesc insistent să corectați această omisiune. Deoarece node.js folosește javascript, învățarea acestuia nu este deosebit de dificilă pentru cei care sunt deja familiarizați cu acest limbaj. Veți petrece mai mult timp configurând pachete de noduri decât scrierii codului în sine.

Personal, cred că fiecare dezvoltator din 2015 ar trebui să fie familiarizat cu Node. Nu vorbesc de cunoștințe profunde, este suficient să le poți aplica pentru dezvoltare de server, prototipare, testare etc.

Există o furcă de node.js numită IO.js, astăzi sunt aproape identice, iar până la urmă doar scrii în Javascript, cu excepția micilor diferențe.

Testare

Cândva, nu am testat deloc codul javascript, pentru că nu credeam că este necesar. Dar scripturile devin din ce în ce mai mari datorită AngularJS și Node.js.

Javascript evoluează, iar volumul de scripturi crește, iar testarea devine vitală. Dacă nu îți testezi codul, atunci o faci greșit. Testerul meu preferat este Karma. Există și altele, dar acesta s-a dovedit a fi cel mai bun atunci când lucrați cu AngularJS. Și dacă este bun pentru AngularJS, atunci este bun pentru mine.

Instrumente

A fi dezvoltator JavaScript în 2015 înseamnă nu numai cunoaștere excelentă a limbii, ci și un număr mare de instrumente pentru a lucra cu acesta.

Uneori, instrumentele includ browserul pe care îl folosim în sine. Și uneori trebuie să apelezi la instrumente terțe pentru a obține o analiză mai aprofundată a situației.

Iată un set de instrumente de reținut: Gulp, Webpack și BabelJS. Există multe mai multe instrumente, dar instrumente precum Gulp și Grunt vă ajută foarte mult în dezvoltarea și gestionarea aplicațiilor javascript.

Au dispărut vremurile în care pur și simplu descărcai un fișier javascript și l-ai adăugat pe pagina ta. Acum folosim manageri de pachete NPM sau Bower.

Combinăm și minimizăm scripturile, le testăm, ceea ce ajută la organizarea structurii proiectului.

instrumentele javascript merg mână în mână atunci când se dezvoltă Javascript izomorf (cod folosit atât pe partea client, cât și pe server). ECMAScript 6, alias ES6, alias ESNext

Browserele încă nu implementează o mare parte din funcționalitatea ECMAScript 6. Dar astăzi puteți utiliza noile caracteristici de la ES6 folosind compilatoare javascript. Cunoașteți noi API-uri și metode: șiruri de caractere, matrice și alte metode precum WeakMaps, Simboluri și clase. Ar trebui să fiți mereu la curent cu schimbările viitoare.

Concluzie

Pot să vă spun multe mai multe. Judecând după dimensiunea acestui articol, vă puteți imagina cât de multe trebuie să știe un dezvoltator JavaScript. Am atins doar vârful aisbergului. Vă rugăm să nu credeți că acest articol ar trebui luat ca un ghid pentru dezvoltatori. Aceasta este doar viziunea mea personală asupra problemei.

Programarea nu este doar o modalitate de a câștiga bani mari și nici măcar nu este o muncă în întregime mentală. Aceasta este o oportunitate de a înțelege în ce constă lumea din jurul nostru, de a o descompune în particule mici și apoi de a o reasambla, ghidați de propria noastră logică și cunoștințe.

Limbajele de programare sunt doar un instrument cu care o persoană construiește reguli în sistemele create.

Internetul prezintă o mulțime de oportunități pe care mințile strălucitoare și întreprinzătoare le profită. Desigur, dezvoltarea web are și propriile instrumente pentru a da viață ideilor. Unul dintre ele este limbajul de programare JavaScript, care va fi discutat în acest articol:

Informații generale

Mulți oameni, chiar și cei care nu au nimic de-a face cu domeniul IT, au auzit cuvântul Java. Un limbaj revoluționar, independent de platformă, în care aplicațiile pentru sistemele mobile sunt scrise în mod activ. A fost dezvoltat de compania promițătoare Sun, care a intrat apoi sub aripa Oracle. Dar nicio companie nu are nimic de-a face cu JavaScript:


Tot ceea ce i s-a cerut de la Sun era permisiunea de a folosi o parte a numelui. În mod surprinzător, JavaScript nu este deținut de nicio companie.

Când scrieți aplicații web, programarea JavaScript este folosită cel mai des. Dacă enumeram pe scurt caracteristicile cheie ale acestui limbaj, ar trebui să evidențiem următoarele:

  • Orientarea obiectelor. Execuția programului reprezintă interacțiunea obiectelor;
  • Conversia tipului de date se realizează automat;
  • Funcțiile sunt obiecte ale clasei de bază. Această caracteristică face JavaScript similar cu multe limbaje de programare funcționale, cum ar fi Lisp și Haskell;
  • Ștergerea automată a memoriei. Așa-numita colectare de gunoi face JavaScript similar cu C# sau Java.

Dacă vorbim despre esența utilizării JavaScript, atunci acest limbaj vă permite să „reînvie” paginile site-ului web nemișcate folosind cod care poate fi executat ( așa-numitele scripturi). Adică putem face o analogie cu desenele animate, unde html și css sunt personajele desenate, iar JavaScript este ceea ce le face să se miște.

Dacă vorbim despre sintaxa JavaScript, atunci are următoarele caracteristici:

  • Înregistrarea este importantă. Funcțiile numite func() și Func() sunt complet diferite;
  • Operatorii trebuie să fie urmați de punct și virgulă;
  • Obiecte și operații încorporate;
  • Spațiile nu sunt numărate. Puteți folosi câte indentări doriți, precum și întreruperi de linie, pentru a vă formata codul.

Cel mai simplu cod JavaScript arată astfel:


Scopul aplicatiei

Pentru a înțelege de ce este nevoie de JavaScript și cât de necesar este pentru a-l învăța, ar trebui să evidențiem câteva domenii în care este folosit acest limbaj de programare.

  • Dezvoltare de aplicații web. Doriți să instalați un contor simplu, să organizați transferul de date între formulare sau să plasați un joc pe site-ul dvs. web? Atunci JavaScript va fi un asistent fidel în această chestiune;
  • „Participarea activă” în AJAX. Această tehnologie a făcut posibilă accelerarea semnificativă a funcționării aplicațiilor prin schimbul de date cu serverul în modul „în fundal”:


  • OS. Este posibil ca unii oameni să nu fi știut, dar Windows, Linux și Mac au propriii lor concurenți în browser, dintre care partea leului este scrisă în JavaScript;
  • Aplicatii mobile;
  • Domeniu de studiu. Orice specialitate de programare la o universitate include într-o măsură sau alta studiul JavaScript. Acest lucru se datorează faptului că limbajul a fost dezvoltat inițial pentru programatori nu foarte puternici. Lecțiile JavaScript sunt țesute logic în cursul HTML de bază, așa că învățarea este destul de simplă.

Avantaje și dezavantaje

Nu credeți că JavaScript este un fel de panaceu pentru toate problemele și fiecare programator folosește acest limbaj cu zâmbetul pe buze. Totul în lume are părțile sale pozitive și negative. În primul rând, să remarcăm deficiențele.

  • Necesitatea de a oferi compatibilitate între browsere. Deoarece JavaScript acționează ca o tehnologie de internet, trebuie să suportați regulile pe care le stabilește World Wide Web. Codul trebuie să ruleze corect în toate, sau cel puțin în cele mai populare, browsere;
  • Sistemul de moștenire într-o limbă provoacă dificultăți în înțelegerea a ceea ce se întâmplă. JavaScript implementează moștenirea bazată pe prototip. Oamenii care au studiat alte limbaje de programare orientate pe obiecte sunt obișnuiți cu familiarul " clasa copil moștenește clasa părinte" Dar în JavaScript, astfel de lucruri sunt gestionate direct de obiecte, iar acest lucru este dincolo de înțelegerea ta;
  • Nu există o bibliotecă standard. JavaScript nu oferă nicio posibilitate de lucru cu fișiere, fluxuri I/O sau alte lucruri utile;
  • Sintaxa în general face dificil de înțeles. Frumusețea codului nu este în mod clar punctul forte al JavaScript, dar se respectă regula principală a programatorilor: „ Lucrări? Nu atinge!».

Acum merită remarcat câteva avantaje

  • JavaScript oferă un număr mare de capabilități pentru rezolvarea unei game largi de probleme. Flexibilitatea limbajului permite utilizarea multor modele de programare în raport cu condițiile specifice. Mintea inventiva va avea o adevarata placere;
  • Popularitatea JavaScript deschide un număr considerabil de biblioteci gata făcute pentru programator, care pot simplifica semnificativ scrierea codului și pot nivela imperfecțiunile de sintaxă;
  • Aplicare în multe domenii. Capacitățile largi ale JavaScript oferă programatorilor șansa de a se încerca ca dezvoltatori ai unei game largi de aplicații, iar acest lucru, desigur, alimentează interesul pentru activitățile profesionale.

Nu acordați atenție faptului că au fost mai multe minusuri decât plusuri. JavaScript este ferm înrădăcinat în nișa sa și nicio critică nu îl va scoate de acolo în acest moment.

Pentru cei care vor să studieze

O cale dificilă și lungă este în față pentru cei care decid să studieze temeinic JavaScript. Pentru începători, există recomandări de bază, în urma cărora îți poți simplifica semnificativ învățarea.

  • În primul rând, HTML. Nu poți începe să faci nimic pentru internet fără elementele de bază. Foile de stil în cascadă (CSS) vor fi, de asemenea, foarte utile;
  • Folosiți literatură nouă. Programarea nu este fizică, ale cărei legi sunt de neîncălcat, iar manualele noi sunt cele vechi. Tehnologiile IT sunt în continuă evoluție, iar actualizările utile nu trebuie neglijate;
  • Încercați să scrieți singur toate secțiunile programului. Dacă ceva nu funcționează deloc, puteți împrumuta codul altcuiva, dar numai după ce mai întâi înțelegeți fiecare linie pentru dvs.;
  • Depanarea este cel mai bun prieten al tău. Găsirea rapidă a erorilor este unul dintre cele mai importante aspecte ale programării;
  • Nu ignora regulile de formatare. Desigur, codul nu va deveni mai bun sau mai rău din cauza numărului diferit de indentări și spații, dar ușurința de citire și înțelegere de către programator este, de asemenea, un punct important. Codul de mai jos? foarte greu de perceput, mai ales dacă nu ești el


  • Numele de variabile trebuie să aibă sens lexical. În procesul de scriere a programelor simple, acest lucru pare deloc important, dar când numărul de linii de cod depășește o mie, toți diavolii își rup picioarele;