Skip to content

Commit c99db29

Browse files
Merge pull request #136 from bogdanbacosca/sync-29216730
fixed conflicts and minor updates
2 parents 0f2be28 + e085581 commit c99db29

File tree

3 files changed

+33
-81
lines changed

3 files changed

+33
-81
lines changed

1-js/03-code-quality/03-comments/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ Comentariile bune ne permit să păstrăm codul organizat, să ne întoarcem la
173173
**Evită comentariile pentru:**
174174

175175
- Pentru a spune "cum funcționează codul" și "ce face".
176-
- Punele înăuntru doar dacă este imposibil să faci codul atât de simplu și autodescriptiv încat să nu fie nevoie de ele.
176+
- Punele înăuntru doar dacă este imposibil să faci codul atât de simplu și autodescriptiv încât să nu fie nevoie de ele.
177177

178178

179179
Comentariile sunt de asemeni folosite pentru unelte de autodocumentare precum JSDoc3: acestea le citesc și generează documentații HTML (sau documentații în alt format).

1-js/04-object-basics/08-symbol/article.md

Lines changed: 31 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11

22
# Tipul simbol ("symbol")
33

4-
Conform specificațiilor, cheile proprietății obiectului pot fi fie de tip șir ("string"), fie de tip simbol ("symbol"). Nu numere, nu booleene, doar șiruri sau simboluri, aceste două tipuri.
4+
Conform specificațiilor, doar două tipuri primitive pot servi drept chei de proprietăți ale obiectului:
55

6-
Până acum am folosit doar șiruri. Acum să vedem ce avantaje ne oferă simbolurile.
6+
- tipul string, sau
7+
- tipul symbol.
8+
9+
În caz contrar, dacă cineva folosește alt tip, cum ar fi număr, este autoconvertit în string. Astfel `obj[1]` este același cu `obj["1"]`, și `obj[true]` este același cu `obj["true"]`.
10+
11+
Până acum am folosit doar string.
12+
13+
Acum haideți sa explorăm symbol, să vedem ce pot face ele pentru noi.
714

815
## Simboluri
916

@@ -12,19 +19,13 @@ Un "symbol" reprezintă un identificator unic.
1219
O valoare de acest tip poate fi creată folosind `Symbol()`:
1320

1421
```js
15-
// id-ul noului simbol
1622
let id = Symbol();
1723
```
1824

19-
După creare, putem aloca o descriere simbolului (mai numită și nume de simbol), folositoare îndeosebi pentru scopuri de depanare:
25+
După creare, putem aloca o descriere simbolului (numită și symbol name), folositoare îndeosebi pentru scopuri de depanare:
2026

21-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
22-
```js run
23-
// id este un simbol cu descrierea "id"
24-
=======
2527
```js
26-
// id is a symbol with the description "id"
27-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
28+
// id este un simbol cu descrierea "id"
2829
let id = Symbol("id");
2930
```
3031

@@ -43,6 +44,8 @@ alert(id1 == id2); // false
4344

4445
Dacă sunteți familiari cu Ruby sau alt limbaj de programare ce are de asemenea orice fel de "simboluri" -- nu vă lăsați păcălit. Simbolurile JavaScript sunt diferite.
4546

47+
Așadar, pentru a rezuma, un simbol este o "valoare unică primitive" cu o descriere opțională. Haideți să vedem unde le putem folosi.
48+
4649
````warn header="Simbolurile nu se auto-convertesc la un șir"
4750
Cele mai multe valori în JavaScript suportă conversie implicită la un șir. De exemplu, putem `alert`-a aproape orice valoare și va funcționa. Simbolurile sunt speciale. Ele nu se auto-convertesc.
4851
@@ -55,13 +58,10 @@ alert(id); // TypeError: Cannot convert a Symbol value to a string
5558
*/!*
5659
```
5760
58-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
59-
Aceasta este "protecția limbajului" ("language guard") împotriva stricăciunilor, deoarece șirurile și simbolurile sunt fundamental diferite și nu ar trebui convertite ocazional dintr-unul în altul.
60-
=======
61-
That's a "language guard" against messing up, because strings and symbols are fundamentally different and should not accidentally convert one into another.
62-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
61+
Aceasta este un "language guard" împotriva încurcăturilor, deoarece string și symbol sunt fundamental diferite și nu ar trebui să se convertească din greșeală unul în celălalt.
6362
6463
Dacă vrem neapărat să afișăm un simbol, trebuie să apelăm explicit metoda `.toString()` a acestuia, ca aici:
64+
6565
```js run
6666
let id = Symbol("id");
6767
*!*
@@ -81,11 +81,7 @@ alert(id.description); // id
8181

8282
## Proprietăți "ascunse"
8383

84-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
85-
Simbolurile ne permit să creăm proprietăți ascunse ale unui obiect, pe care nicio bucată de cod nu le poate accesa sau rescrie accidental.
86-
=======
87-
Symbols allow us to create "hidden" properties of an object, that no other part of code can accidentally access or overwrite.
88-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
84+
Simbolurile ne permit să creăm proprietăți "ascunse" ale unui obiect, pe care nicio altă parte a codului nu le poate accesa sau suprascrie din greșeală.
8985

9086
De exemplu, dacă lucrăm cu obiecte `user`, ce fac parte din cod extern, am dori să le adăugăm identificatori.
9187

@@ -105,13 +101,9 @@ alert( user[id] ); // putem accesa informația folosind simbolul ca și cheie
105101

106102
Care sunt avantajele folosirii `Symbol("id")` față de un șir `"id"`?
107103

108-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
109-
Deoarece obiectele `user` aparțin altui cod, și acel cod lucrează de asemenea cu acestea, nu ar trebui să adăugăm niciun câmp la ele. Este nesigur. Însă un simbol nu poate fi accesat accidental, codul extern, probabil, nici nu-l va vedea, deci pesemne este în regulă să o facem.
110-
=======
111-
As `user` objects belongs to another code, and that code also works with them, we shouldn't just add any fields to it. That's unsafe. But a symbol cannot be accessed accidentally, the third-party code probably won't even see it, so it's probably all right to do.
112-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
104+
Deoarece obiectele `user` aparțin altui cod, nu este sigur să le adăugăm câmpuri, deoarece am putea afecta comportamentul predefinit în acel codebase. Cu toate acestea, simbolurile nu pot fi accesate din greșeală. Codul terților nu va fi conștient de simbolurile nou definite, deci este sigur să adăugăm symbol la obiectele `user`.
113105

114-
De asemenea, imaginați-vă că un alt script dorește să aibă propriul său identificator în interiorul obiectului `user`, pentru propriile sale scopuri. Poate fi o altă librărie JavaScript, astfel că script-urile nu știu unul de existența celuilalt.
106+
De asemenea, imaginați-vă că un alt script dorește să aibă propriul său identificator în interiorul obiectului `user`, pentru propriile sale scopuri.
115107

116108
Apoi acel script își poate crea propriul `Symbol("id")`, ca aici:
117109

@@ -138,11 +130,7 @@ user.id = "Their id value"
138130
// Boom! rescris de alt script!
139131
```
140132

141-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
142-
### Simboluri într-un literal
143-
=======
144-
### Symbols in an object literal
145-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
133+
### Simboluri într-un object literal
146134

147135
Dacă vrem să folosim un simbol într-un obiect literal `{...}`, avem nevoie de paranteze pătrate în jurul lui.
148136

@@ -154,17 +142,13 @@ let id = Symbol("id");
154142
let user = {
155143
name: "John",
156144
*!*
157-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
158-
[id]: 123 // nu "id: 123"
159-
=======
160-
[id]: 123 // not "id": 123
161-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
145+
[id]: 123 // nu "id": 123
162146
*/!*
163147
};
164148
```
165149
Asta deoarece avem nevoie de valoarea din variabila `id` ca și cheie, nu de șirul "id".
166150

167-
### Simbolurile sunt ignorate de bucla for..in
151+
### Simbolurile sunt sărite de for..in
168152

169153
Proprietățile simboluri nu participă în bucla `for..in`.
170154

@@ -183,14 +167,10 @@ for (let key in user) alert(key); // name, age (niciun simbol)
183167
*/!*
184168

185169
// accesul direct către simbol funcționează
186-
alert( "Direct: " + user[id] );
170+
alert( "Direct: " + user[id] ); // Direct: 123
187171
```
188172

189-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
190-
`Object.keys(user)` le ignoră, de asemenea. Aceasta este o parte a principiului general "ascunderea proprietăților simbol". Dacă un alt script sau librărie iterează asupra obiectului, nu va accesa neașteptat o proprietate simbol.
191-
=======
192-
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) also ignores them. That's a part of the general "hiding symbolic properties" principle. If another script or a library loops over our object, it won't unexpectedly access a symbolic property.
193-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
173+
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) le ignoră, de asemenea. Aceasta este o parte a principiului general "ascunderea proprietăților simbolice". Dacă un alt script sau librărie iterează asupra obiectului nostru, nu va accesa neașteptat o proprietate simbol.
194174

195175
În contrast, metoda [Object.assign](mdn:js/Object/assign) copiază proprietățile de ambele tipuri, șir și simbol:
196176

@@ -207,27 +187,7 @@ alert( clone[id] ); // 123
207187

208188
Nu este niciun paradox aici. Așa este construit. Ideea este că, atunci când clonăm un obiect sau contopim obiecte, în mod normal vrem ca *toate* proprietățile să fie copiate (incluzând simboluri precum `id`).
209189

210-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
211-
````smart header="Proprietățile cheie de alte tipuri sunt forțate la șiruri"
212-
Putem folosi doar șiruri sau simboluri ca și chei în obiecte. Alte tipuri sunt convertite la șiruri.
213-
214-
De exemplu, un număr `0` devine un șir `"0"` când este folosit ca și proprietate cheie:
215-
216-
```js run
217-
let obj = {
218-
0: "test" // identic cu "0": "test"
219-
};
220-
221-
// ambele alerte accesează aceeași proprietate (numărul 0 este convertit la șirul "0")
222-
alert( obj["0"] ); // test
223-
alert( obj[0] ); // test (aceeași proprietate)
224-
```
225-
````
226-
227190
## Simboluri globale
228-
=======
229-
## Global symbols
230-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
231191

232192
După cum am văzut, în mod normal toate simbolurile sunt diferite, chiar dacă au același nume. Însă câteodată dorim ca simbolurile numite identic să fie aceleași entități. De exemplu, diferite părți ale aplicației noastre doresc să acceseze simbolul `"id"` care să însemne exact aceeași proprietate.
233193

@@ -260,7 +220,7 @@ Simbolurile din interiorul registrului sunt denumite *simboluri globale*. Dacă
260220

261221
### Symbol.keyFor
262222

263-
Pentru simbolurile globale, nu numai `Symbol.for(key)` returnează un simbol după nume, dar există și un apel invers: `Symbol.keyFor(sym)`, care face reversul: returnează un nume după un simbol global.
223+
Am văzut că pentru simbolurile globale, `Symbol.for(key)` returnează un simbol după nume. Pentru a face opusul -- să returnăm un nume pentru un simbol global -- putem folosi: `Symbol.keyFor(sym)`:
264224

265225
De exemplu:
266226

@@ -274,11 +234,7 @@ alert( Symbol.keyFor(sym) ); // name
274234
alert( Symbol.keyFor(sym2) ); // id
275235
```
276236

277-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
278-
Metoda `Symbol.keyFor` folosește intern registrul global de simboluri pentru a căuta cheia simbolului. Deci nu funcționează pentru simboluri non-globale. Dacă simbolul nu este global, nu îl va putea găsi și va returna `undefined`.
279-
=======
280-
The `Symbol.keyFor` internally uses the global symbol registry to look up the key for the symbol. So it doesn't work for non-global symbols. If the symbol is not global, it won't be able to find it and returns `undefined`.
281-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
237+
Acest `Symbol.keyFor` utilizează în mod intern registrul global de simboluri pentru a căuta cheia simbolului. Deci nu funcționează pentru simboluri non-globale. Dacă simbolul nu este global, nu îl va putea găsi și va returna `undefined`.
282238

283239
Acestea fiind spuse, orice simbol poate avea proprietatea `description`.
284240

@@ -316,20 +272,16 @@ Alte simboluri vor deveni de asemenea familiare după ce vom studia caracteristi
316272

317273
Simbolurile sunt create cu apelul `Symbol()` cu o descriere opțională (name).
318274

319-
Simbolurile sunt întotdeauna valori diferite, chiar dacă au același nume. Dacă vrem ca simbolurile cu același nume să fie egale, atunci trebuie să folosim registrul global: `Symbol.for(key)` returnează (creează dacă este nevoie) un simbol global cu `cheie` ca și nume. Apelări multiple ale metodei `Symbol.for` aceeași `cheie` returnează exact același simbol.
275+
Simbolurile sunt întotdeauna valori diferite, chiar dacă au același nume. Dacă vrem ca simbolurile cu același nume să fie egale, atunci trebuie să folosim registrul global: `Symbol.for(key)` returnează (creează dacă este nevoie) un simbol global cu `cheie` ca și nume. Apelări multiple a `Symbol.for` cu aceeași `key` returnează exact același simbol.
320276

321277
Simbolurile au două cazuri principale de folosire:
322278

323-
<<<<<<< HEAD:1-js/04-object-basics/03-symbol/article.md
324279
1. Proprietăți "ascunse" ale unui obiect.
325-
Dacă vrem să adăugăm o proprietate într-un obiect care "aparține" altui script sau biblioteci, putem crea un simbol și îl putem folosi ca și proprietate cheie. O proprietate simbolică nu apare în `for..in`, motiv pentru care, nu va fi procesată accidental împreună cu alte proprietăți. De asemenea, nu va fi accesată direct, deoarece un alt script nu va avea simbolul nostru. În concluzie, proprietatea va fi protejată împotriva folosirii sau rescrierii accidentale.
326-
=======
327-
1. "Hidden" object properties.
328-
If we want to add a property into an object that "belongs" to another script or a library, we can create a symbol and use it as a property key. A symbolic property does not appear in `for..in`, so it won't be accidentally processed together with other properties. Also it won't be accessed directly, because another script does not have our symbol. So the property will be protected from accidental use or overwrite.
329-
>>>>>>> 29216730a877be28d0a75a459676db6e7f5c4834:1-js/04-object-basics/08-symbol/article.md
330280

331-
Deci, putem ascunde "după cortină", în obiecte, ceva de care avem nevoie, dar alții nu ar trebui să vadă, folosind proprietăți simbol.
281+
Dacă vrem să adăugăm o proprietate într-un obiect care "aparține" altui script sau un library, putem crea un simbol și îl putem folosi ca și property key. O proprietate simbolică nu apare în `for..in`, așa că nu va fi procesată accidental împreună cu alte proprietăți. De asemenea nu va fi accesată direct, deoarece un alt script nu are simbolul nostru. Așa că proprietatea va fi protejată împotriva utilizării sau suprascrierii accidentale.
282+
283+
Deci putem ascunde "după cortină" ceva în obiectele de care avem nevoie, dar pe care alții nu ar trebui să le vadă, folosind proprietăți simbolice.
332284

333-
2. Există multe simboluri sistem folosite de JavaScript care sunt accesibile prin `Symbol.*`. Le putem folosi pentru a altera comportamente incluse în limbaj. De exemplu, mai târziu în tutorial vom folosi `Symbol.iterator` pentru [iterables](info:iterable), `Symbol.toPrimitive` pentru a configura [object-to-primitive conversion](info:object-toprimitive) ș.a.m.d.
285+
2. Există multe simboluri sistem folosite de JavaScript care sunt accesibile prin `Symbol.*`. Le putem folosi pentru a altera câteva comportamente incluse în limbaj. De exemplu, mai târziu în tutorial vom folosi `Symbol.iterator` pentru [iterabile](info:iterable), `Symbol.toPrimitive` pentru a configura [conversia object-to-primitive](info:object-toprimitive) ș.a.m.d.
334286

335-
Tehnic, simbolurile nu sunt 100% ascunse. Există metode ale limbajului JavaScript [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) care ne permit sa accesăm toate simbolurile. Mai există o metodă numită [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) care returnează *toate* cheile unui obiect incluzându-le și pe cele simbol. Deci ele nu sunt ascunse cu adevărat. Dar cele mai multe biblioteci, funcții incluse în limbaj și construcții de sintaxă nu folosesc aceste metode.
287+
Tehnic, simbolurile nu sunt 100% ascunse. Există metode ale limbajului JavaScript [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) care ne permit sa accesăm toate simbolurile. Mai există o metodă numită [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) care returnează *toate* cheile unui obiect incluzându-le și pe cele simbolice. Dar cele mai multe librării, funcții built-in și construcții de sintaxă nu folosesc aceste metode.

1-js/04-object-basics/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
# Objects: the basics
1+
# Obiecte: noțiuni de bază

0 commit comments

Comments
 (0)