◐ Shell
reader mode source ↗
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
File filter
Conversations
Jump to
Diff view
Apply and reload
Show whitespace
Diff view
Apply and reload
47 changes: 47 additions & 0 deletions 1-js/01-getting-started/1-intro/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,26 @@ Termenii de mai sus sunt bine de știut pentru că ei sunt folosiți în articol

Motoarele sunt complicate. Dar bazele sunt ușoare.

1. Motorul (încorporat, dacă este un browser) citește("parsează") script-ul.
2. Apoi convertește("compilează") script-ul în limbajul mașină.
3. Apoi codul mașină rulează, destul de repede.

Motorul aplică optimizări la fiecare stadiu al procesului. Ba chiar observă script-ul compilat cum rulează, analizează datele care trec prin el și aplică optimizări suplimentare asupra codului mașină bazate pe informațiile strânse.
```

## Ce poate JavaScript-ul din browser să facă?

JavaScript-ul modern este un limbaj de programare "sigur". Nu furnizează acces low-level la memorie sau la CPU, pentru că inițial a fost creat pentru browsere, care nu necesitau acest lucru.

Capabilitățile depind mult de mediul în se care rulează JavaScript. De exemplu, [Node.JS](https://wikipedia.org/wiki/Node.js) suportă funcții care permit JavaScript-ului să citească/scrie fișiere arbitrare, să realizeze request-uri de rețea, etc.

@@ -59,14 +69,19 @@ De exemplu, JavaScript din browser este capabil să:

## Ce NU poate JavaScript-ul din browser să facă?

Abilitățile JavaScript-ului din browser sunt limitate de dragul siguranței utilizatorului. Scopul este de a preveni o pagină web malițioasă să acceseze informații private sau să corupă datele utilizatorului.

Exemplele acestor restricții sunt:

- JavaScript-ul de pe o pagină web nu poate citi/scrie fișiere arbitrare pe hard disk, nu le poate copia sau să execute programe. Nu are acces direct la funcțiile sistemului de operare.

Browserele moderne îi permit să lucreze cu fișiere, dar accesul este limitat și furnizat doar dacă utilizatorul realizează anumite acțiuni, cum ar fi "scăparea" unui fișier într-o fereastră de browser sau selectarea lui printr-un tag `<input>`.

Există mijloace prin care se poate interacționa cu camera/microfonul sau alte dispozitive, dar ele necesită permisiunea explicită a utilizatorului. Așadar o pagină pe care este activat JavaScript-ul nu ar putea activa o cameră web în mod viclean, și să privească împrejurimile și să trimită informații către [NSA](https://en.wikipedia.org/wiki/National_Security_Agency).
- În general, diferite tab-uri/ferestre nu știu nimic unele despre celelalte. Câteodată acestea știu, de exemplu când o fereastră folosește JavaScript pentru a deschide cealaltă fereastră. Dar chiar și în acest caz, JavaScript nu poate accesa cealaltă fereastră dacă ambele ferestre vin de pe site-uri diferite (de la un domeniu, protocol sau port diferit).

Expand All @@ -78,6 +93,19 @@ Exemplele acestor restricții sunt:
![](limitations.svg)

Astfel de limite nu există dacă JavaScript este folosit în afara browser-ului, de exemplu pe un server. Browserele moderne permit de asemenea instalarea plugin-urilor/extensiilor care pot cere extinderea permisiunilor.

## Ce face JavaScript, unic?

Expand All @@ -92,20 +120,29 @@ JavaScript este singura tehnologie browser care combină aceste trei lucruri.

Asta e ceea ce face JavaScript unic. De aceea este cea mai răspândită unealtă pentru crearea de interfețe pentru browser.

Acestea fiind spuse, JavaScript permite de asemenea crearea serverlor, aplicațiilor mobile etc.

## Limbaje "peste" JavaScript

Sintaxa JavaScript-ului nu se potrivește cerințelor fiecăruia. Persoane diferite vor diferite feature-uri.

Acest lucru este de așteptat, pentru că proiectele și cerințele sunt diferite pentru fiecare.

Așa că, recent au apărut o pletoră de limbaje noi, care sunt *transpiled*(convertite) în JavaScript înainte ca ele să ruleze în browser.

Uneltele moderne fac transpilarea foarte rapidă și transparentă, permițând defapt dezvoltatorilor să codeze în alt limbaj și să auto convertească codul în cod "sub capotă"(under the hood).

Exemple de astfel de limbaje:

- [CoffeeScript](http://coffeescript.org/) este un "zahăr sintatic" pentru JavaScript. El introduce sintaxă mai scurtă, permițându-ne să scrim cod mai clar și mai precis. De obicei dezvoltatorii Ruby îl plac.
- [TypeScript](http://www.typescriptlang.org/) este concentrat pe adăugarea de "tipizare strictă de date", pentru a simplifica dezvoltarea și suportul sistemelor complexe. Este dezvoltat de Microsoft.
- [Flow](http://flow.org/) de asemeni adaugă data typing, dar într-un mod diferit. Dezvoltat de Facebook.
Expand All @@ -114,6 +151,16 @@ Exemple de astfel de limbaje:
- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) este un limbaj de programare modern, concis și sigur care țintește browser-ul sau Node.

Există mai multe. Desigur, chiar dacă folosim unul dintre aceste limbaje, ar trebui de asemenea să știm JavaScript, pentru a înțelege cu adevărat ce facem.

## Rezumat

Expand Down
16 changes: 16 additions & 0 deletions 1-js/01-getting-started/3-code-editors/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ Un IDE încarcă proiectul (pot fi mai multe fișiere), permite navigarea între
Dacă nu ai selectat până acum un IDE, uită-te la următoarele variante:

- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free).
- [WebStorm](https://www.jetbrains.com/webstorm/) (cross-platform, plătit).

Pentru Windows există de asemenea un editor "Visual Studio", a nu se confunda cu "Visual Studio Code". "Visual Studio" este un editor doar pentru Windows, plătit dar puternic, foarte potrivit pentru platforma .NET. O versiune gratuită al lui este [Visual Studio Community](https://www.visualstudio.com/vs/community/).

Expand All @@ -29,19 +33,31 @@ Diferența majoră dintre un editor de "categorie ușoară" și un "IDE" este c

În practică, editoarele de categorie ușoară pot avea multe plugin-uri, inclusiv analizatoare de sintaxă la nivel de director sau autocompletatoare, așadar nu este o graniță strictă între un editor de categorie ușoară și un IDE.

Sunt multe opțiuni, spre exemplu:

- [Sublime Text](http://www.sublimetext.com) (cross-platform, shareware).
- [Notepad++](https://notepad-plus-plus.org/) (Windows, gratuit).
- [Vim](http://www.vim.org/) și [Emacs](https://www.gnu.org/software/emacs/) sunt de asemenea utile dacă știi cum să le folosești.

## Să nu ne certăm

Editoarele din lista de mai sus sunt cele pe care fie eu sau prietenii mei, pe care îi consider dezvoltatori buni, le-am folosit pentru un timp îndelungat și suntem mulțumiți de ele.

Există și alte editoare grozave în lumea asta mare. Te rog alege un editor care îți place cel mai mult.

Alegerea unui editor, ca a oricărui alt tool, este individuală și depinde de proiectele tale, obiceiurile și preferințele personale.

The author's personal opinion:

Expand Down
6 changes: 5 additions & 1 deletion 1-js/01-getting-started/4-devtools/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Uneltele de dezvoltare se vor deschide cu tabul Console deschis implicit.

Arată similar cu:

![chrome](chrome.png)

Aspectul exact al uneltelor de dezvoltare depinde de versiunea de Chrome folosită. Se schimbă din când în când, dar trebuie să fie asemănătoare.

Expand All @@ -49,7 +49,11 @@ Aspectul și funcționarea lor sunt oarecum similare. Odată ce ați învățat

Safari (browser pentru Mac, nesuportat pe Windows/Linux) e un pic diferit. Întâi trebuie să activăm meniul de dezvoltare (Develop menu).

Deschideți preferințele (Preferences) și mergeți în secțiunea de setări avansate (Advanced). În partea de jos se află un checkbox.

![safari](safari.png)

Expand Down
Binary file added 1-js/01-getting-started/4-devtools/chrome.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 1-js/01-getting-started/4-devtools/chrome@2.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed 1-js/01-getting-started/4-devtools/chrome@2x.png
Binary file not shown.
Binary file modified 1-js/01-getting-started/4-devtools/safari@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 12 additions & 1 deletion 1-js/02-first-steps/04-variables/3-uppercast-constant/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,26 @@ const birthday = '18.04.1982';
const age = someCode(birthday);
```

Aici avem o constantă `birthday` pentru dată, și de asemenea constanta `age`.

`age` este calculată din `birthday` folosind `someCode()`, ceea ce înseamnă un apel de funcție pe care nu l-am explicat încă (o vom face în curând!), dar detaliile nu contează aici, ideea este că `age` este calculată cumva pe baza `birthday`.

Ar fi corect să folosim majuscule pentru `birthday`? Pentru `age`? Sau chiar pentru ambele?

```js
const BIRTHDAY = '18.04.1982'; // facem BIRTHDAY cu majuscule?

const AGE = someCode(BIRTHDAY); // facem AGE cu majuscule?
```

Loading
Toggle all file notes Toggle all file annotations