From 323f5ba8165f479231319a69728602c333575460 Mon Sep 17 00:00:00 2001 From: RaresCon Date: Mon, 16 Jan 2023 21:01:59 +0200 Subject: [PATCH 1/6] Translated the second chapter of the Rust tour --- lessons/ro/chapter_1.yaml | 227 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 lessons/ro/chapter_1.yaml diff --git a/lessons/ro/chapter_1.yaml b/lessons/ro/chapter_1.yaml new file mode 100644 index 000000000..a5ee9e89e --- /dev/null +++ b/lessons/ro/chapter_1.yaml @@ -0,0 +1,227 @@ +- title: Capitolul 1 - The Basics + content_markdown: > + În acest prim capitol vom explora ideile și conceptele de bază despre + funcții, variabile și cele mai primitive tipuri de date. Ne bucurăm că + ne ești alături! + + + De asemenea, în cazul în care te întrebai cine este crabul adorabil care + îți vorbește, mă numesc **Ferris**, + mascota neoficială a limbajului Rust. Încântat de cunoștință! + + + Odată ce te vei familiariza cu Rust, poți să te declari un **Rustaceu**. Așa + se numesc toți oamenii care folosesc, contribuie sau sunt interesați de Rust. +- title: The Rust Playground + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20println!(%22Welcome%20to%20the%20playground!%20You%20can%20modify%20the%20code%20in%20here.%22)%3B%0A%7D%0A + content_markdown: > + În acest curs veți utiliza un coding tool interactiv [Rust + Playground](https://play.rust-lang.org). + + + E o modalitate bună de a te juca cu Rust și a arăta altora + creativitatea și provocările tale! +- title: Variabile + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20rust%20infers%20the%20type%20of%20x%0A%20%20%20%20let%20x%20%3D%2013%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%0A%20%20%20%20%2F%2F%20rust%20can%20also%20be%20explicit%20about%20the%20type%0A%20%20%20%20let%20x%3A%20f64%20%3D%203.14159%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%0A%20%20%20%20%2F%2F%20rust%20can%20also%20declare%20and%20initialize%20later%2C%20but%20this%20is%20rarely%20done%0A%20%20%20%20let%20x%3B%0A%20%20%20%20x%20%3D%200%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A + content_markdown: > + Variabilele sunt declarate folosind cuvântul cheie **let**. + + + Atunci când dai unei variabile o valoare, Rust este capabil să deducă tipul acesteia + în 99% + + din cazuri. Dacă acesta nu poate, poți adăuga tipul de date la declarare variabilei. + + + Observați cum putem să dăm valori aceluiași nume de variabilă de mai multe ori. Acest + fenomen se numește variable + + shadowing (punere în umbră) și tipul de date se poate schimba pentru referințe ulterioare + la acel nume de variabilă. + + + Numele de variabile sunt mereu scrisă sub formă `snake_case` (ex: my_first_variable). +- title: Modificarea variabilelor + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%2042%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20x%20%3D%2013%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A + content_markdown: > + Limbajul Rust ține foarte mult la ce variabile pot fi modificate. Variabilele + + fac parte din două categorii: + + + * **mutable** (mutabile) - compilatorul va lăsa utilizatorul să modifice șî + să citească valoarea acestui tip de variabile. + + * **immutable** (imutabile) - compilatorul va lăsa utilizatorul doar să citească valoarea acestei variabile. + + + Valorile mutabile sunt declarate cu ajutorul cuvântului cheie **mut**. + + + O să revenim pentru a vorbi mai multe despre acest concept, dar deocamdată doar fiți + atenți la acest cuvânt cheie. +- title: Tipuri de date de bază + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2012%3B%20%2F%2F%20by%20default%20this%20is%20i32%0A%20%20%20%20let%20a%20%3D%2012u8%3B%0A%20%20%20%20let%20b%20%3D%204.3%3B%20%2F%2F%20by%20default%20this%20is%20f64%0A%20%20%20%20let%20c%20%3D%204.3f32%3B%0A%20%20%20%20let%20bv%20%3D%20true%3B%0A%20%20%20%20let%20t%20%3D%20(13%2C%20false)%3B%0A%20%20%20%20let%20sentence%20%3D%20%22hello%20world!%22%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20x%2C%20a%2C%20b%2C%20c%2C%20bv%2C%20t.0%2C%20t.1%2C%20sentence%0A%20%20%20%20)%3B%0A%7D%0A + content_markdown: > + Rust are o varietate de tipuri de date familiare ție: + + + * booleans - `bool` pentru a reprezenta adevărat și fals + + * unsigned integers - `u8` `u16` `u32` `u64` `u128` pentru a reprezenta + numere nenegative întregi + + * signed integers - `i8` `i16` `i32` `i64` `i128` pentru a reprezentare numere întregi + + * pointer sized integers - `usize` `isize` pentru a reprezenta indexi + + și dimensiunea lucrurilor în memorie + + * floating point - `f32` `f64` pentru a reprezenta numere reale + + * tuple (tuplu) - `(value, value, ...)` pentru trecerea unor secvențe fixe de valori pe stivă + + * arrays - `[value, value, ...]` o colecție cu dimensiune fixă de elemente similare + cunoscută la momentul compilării + + * slices - o colecție de elemente similare cu dimensiune cunoscută în timpul rulării + + * `str`(string slice) - text de lungime cunoscută în timpul rulării + + + Text s-ar putea să fie mai complex în Rust față de alte limbaje de programare cu care ești obșnuit; + + având în vedere că Rust este un limbaj de programare a sistemului, îi pasă de probleme legate + + de memorie cu care s-ar putea să nu fi obișnuit. O să aprofundăm aceste lucruri mai târziu. + + + Tipurile numerice pot fi impuse prin adăugarea la finalul unui număr (ex: `13u32`, `2u8`). +- title: Conversia tipurile de bază + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%2013u8%3B%0A%20%20%20%20let%20b%20%3D%207u32%3B%0A%20%20%20%20let%20c%20%3D%20a%20as%20u32%20%2B%20b%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20c)%3B%0A%0A%20%20%20%20let%20t%20%3D%20true%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20t%20as%20u8)%3B%0A%7D%0A + content_markdown: > + Rust are nevoie de explicitate când vine vorba de tipurile numerice. Nu poți + + folosi un `u8` pentru un `u32` în mod neglijent fără + + apariția unei erori. + + + Din fericire Rust poate face conversia de la un tip numeric la altul foarte ușor + folosind cuvântul cheie **as**. +- title: Constante + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=const%20PI%3A%20f32%20%3D%203.14159%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22To%20make%20an%20apple%20%7B%7D%20from%20scratch%2C%20you%20must%20first%20create%20a%20universe.%22%2C%0A%20%20%20%20%20%20%20%20PI%0A%20%20%20%20)%3B%0A%7D%0A + content_markdown: > + Constantele ne permit să specificăm o valoare folosită uzual de-a lungul + + codului nostru în mod eficient. În loc să copiem valori folosind variabile + + acolo unde sunt folosite, constantele înlocuiesc direct numele lor cu + valoarea + + lor acolo unde sunt folosite. + + + Spre deosebire de variabile, constantele vor fi mereu declarate cu tip de date specific. + + + Numele constantelor sunt mereu scrise în format `SCREAMING_SNAKE_CASE` (ex: MY_FIRST_CONSTANT). +- title: Array-uri + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20nums%3A%20%5Bi32%3B%203%5D%20%3D%20%5B1%2C%202%2C%203%5D%3B%0A%20%20%20%20println!(%22%7B%3A%3F%7D%22%2C%20nums)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20nums%5B1%5D)%3B%0A%7D%0A + content_markdown: > + Un *array* este o **colecție de dimensiune fixă** de elemente care conțin date de același + tip. + + + Tipul de date pentru un *array* este scris sub forma `[T;N]`, unde T reprezintă tipul elementelor, iar N + reprezintă dimensiunea fixă cunoscută la momentul compilării. + + + Elemente individuale pot fi accesate cu ajutorul operatorului `[x]`, unde *x* este un + index *usize* (începând cu 0) al elementului pe care dorești să îl accesezi. + + + Colecțiile cu dimensiune dinamică, deseori numite array-uri dinamice sau variabile, îți + vor fi prezentate într-un capitol viitor numit **Vectori**. +- title: Funcții + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20add(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20return%20x%20%2B%20y%3B%0A%7D%0A%0Afn%20subtract(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20x%20-%20y%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%2242%20%2B%2013%20%3D%20%7B%7D%22%2C%20add(42%2C%2013))%3B%0A%20%20%20%20println!(%2242%20-%2013%20%3D%20%7B%7D%22%2C%20subtract(42%2C%2013))%3B%0A%7D%0A + content_markdown: > + O funcție admite mai multe argumente sau deloc. + + + În acest exemplu, funcția *add* admite două argumente de tip `i32` + (signed integer cu dimensiune de 32 de biți). + + + Dacă vrei să returnezi o valoare sau expresie, poți folosi cuvântul cheie `return` + și punct și virgula la final, așa cum am făcut în funcția *subtract*. + + + Numele funcțiilor sunt mereu scrise în format `snake_case`. + + + Hint: dacă definești o funcție, datele pe care le admite se numesc parametrii. + Dacă folosești o funcție și îi transmiți niște date, atunci ele se numesc argumente. +- title: Returnarea mai multor valori + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20swap(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20(i32%2C%20i32)%20%7B%0A%20%20%20%20return%20(y%2C%20x)%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20return%20a%20tuple%20of%20return%20values%0A%20%20%20%20let%20result%20%3D%20swap(123%2C%20321)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20result.0%2C%20result.1)%3B%0A%0A%20%20%20%20%2F%2F%20destructure%20the%20tuple%20into%20two%20variables%20names%0A%20%20%20%20let%20(a%2C%20b)%20%3D%20swap(result.0%2C%20result.1)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20b)%3B%0A%7D%0A + content_markdown: > + Funcțiile pot returna mai multe valori prin returnarea unui **tuple** (tuplu) + + de valori. + + + Elementele unui tuplu pot fi accesate folosind indexul acestora. (ex: my_tuple.0) + + + Rust suportă diferite tipuri de destructurări pe care le vom vedea în multe contexte, + permințându-ne + + să extragem fracțiuni ale unor structuri de date în moduri ingenioase. Fii pe fază! +- title: Returnarea + content_markdown: > + Dacă pentru o funcție nu se specifică ce tip returnează, aceasta va returna un tuplu gol, + cunoscut și sub numele de *unit* (unitate). + + + Un tuplu gol este reprezentat de `()`. + + + Folosirea unui `()` nu este des întâlnită, dar va apărea de suficiente ori, deci este bine să știi + ce se întâmplă. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20make_nothing()%20-%3E%20()%20%7B%0A%20%20%20%20return%20()%3B%0A%7D%0A%0A%2F%2F%20the%20return%20type%20is%20implied%20as%20()%0Afn%20make_nothing2()%20%7B%0A%20%20%20%20%2F%2F%20this%20function%20will%20return%20()%20if%20nothing%20is%20specified%20to%20return%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%20make_nothing()%3B%0A%20%20%20%20let%20b%20%3D%20make_nothing2()%3B%0A%0A%20%20%20%20%2F%2F%20Printing%20a%20debug%20string%20for%20a%20and%20b%0A%20%20%20%20%2F%2F%20Because%20it's%20hard%20to%20print%20nothingness%0A%20%20%20%20println!(%22The%20value%20of%20a%3A%20%7B%3A%3F%7D%22%2C%20a)%3B%0A%20%20%20%20println!(%22The%20value%20of%20b%3A%20%7B%3A%3F%7D%22%2C%20b)%3B%0A%7D%0A +- title: Capitolul 1 - Încheiere + content_markdown: > + Până acu', e bine! Bazele Rust-ului nu sunt așa de rele, nu-i așa? Am + + aruncat o privire modului în care gândește compilatorul de Rust. Fiind un limbaj de programare + a sistemului + + acesta ține mult la dimensiunea valorilor în memorie, fie că pot fi + modificate sau nu, + + și la faptul că matematica pe care o aplici este cea corectă. În cele ce urmează, ne vom + întâlni cu niște vechi prieteni: + + teste `if` și bucle `for`. + + + Mai multe resurse: + + + * [Youtube: Rust Cast - A deeper dive on Rust's primitive number + types](https://www.youtube.com/watch?v=n5TRBkbystY) + + * [Website: Rust Book 2018 - A deeper description on basic data + types](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-02-data-types.html) + + * [Website: Rust Cheat Sheet - Data Types](https://cheats.rs/#basic-types) From 64a0be5e71b2f5f48d894890c7416f35442dc14e Mon Sep 17 00:00:00 2001 From: RaresCon Date: Mon, 16 Jan 2023 22:20:15 +0200 Subject: [PATCH 2/6] Translated the third chapter of the Rust tour --- lessons/ro/chapter_2.yaml | 133 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 lessons/ro/chapter_2.yaml diff --git a/lessons/ro/chapter_2.yaml b/lessons/ro/chapter_2.yaml new file mode 100644 index 000000000..581c0899c --- /dev/null +++ b/lessons/ro/chapter_2.yaml @@ -0,0 +1,133 @@ +- title: Capitolul 2 - Controlul Basic al Flow-ului + content_markdown: > + În acest capitol vom vorbi despre metodele de control basic al flow-ului în Rust. + + Dacă ești familiar cu limbaje bazate pe C, o să te simți ca acasă și + poate + + te vei bucura de o surpriză sau două. +- title: if/else + content_markdown: > + Ramificarea codului în Rust nu este surprinzătoare. + + + Condițiile nu au nevoie de paranteze! Am avut vreodată de fapt nevoie de ele? Logica noastră + poate arăta acum frumos și curat. + + + În rest, toți operatorii relaționali și logici funcționează la fel: `==`, `!=`, `<`, + `>`, `<=`, `>=`, `!`, `||`, `&&`. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20if%20x%20%3C%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22less%20than%2042%22)%3B%0A%20%20%20%20%7D%20else%20if%20x%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22is%2042%22)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22greater%20than%2042%22)%3B%0A%20%20%20%20%7D%0A%7D +- title: bucle + content_markdown: | + Ai nevoie de o buclă infinită? + + Rust face asta într-un mod foarte simplu. + + `break` te va arunca în afara buclei când ești pregătit. + + `loop` are un secret despre care vom vorbi curând. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A +- title: while + content_markdown: | + `while` te lasă să adaugi o condiție logică unei bucle. + + Dacă condiția impusă buclei devine falsă, bucla se va termina. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20while%20x%20!%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%7D%0A%20%20%20%20println!(%22x%20is%20%7B%7D%22%2C%20x)%3B%0A%7D%0A +- title: for + content_markdown: > + Bucla `for` din Rust e o îmbunătățire importantă. Ea + + iterează prin valorile oricărei expresii care poate fi transformată într-un iterator. + Ce este + + un iterator? Un iterator este un obiect pe care îl poți întreba "Care este + the + + următorul element pe care îl ai?" până când acesta nu mai are elemente. + + + Vom explora acest lucru într-un capitol viitor. Între timp, ține minte că Rust + poate + + creea ușor iteratori care generează o secvență de numere întregi. + + + Operatorul `..` creează un iterator care generează numere de la un + număr pâna la + + alt număr, fără să îl includă pe cel din urmă. + + + Operatorul `..=` creează un iterator care generează numere de la un număr + număr pâna la + + alt număr, inclusiv cel din urmă. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20for%20x%20in%200..5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20for%20x%20in%200..%3D5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%7D%0A +- title: match + content_markdown: > + Îți lipsește switch-ul din C? Rust are un cuvânt cheie incredibil de folositor + + pentru îndeplinirea tuturor posibilităților unei valori și executarea unei bucăți de cod dacă + o anumită + + posibilitate este adevărată. Hai să vedem cum merge asta pentru numere. Avem de discutat mai + multe + + în capitolele viitoare despre pattern matching pentru date mai complexe. Îți promit că + o să + + merite așteptarea. + + + `match` este exhaustiv, deci toate cazurile + + trebuie să fie abordate și implementate. + + + Matching combinat cu destructurarea datelor este de departe unul din + + cele mai întâlnite pattern-uri pe care le vei vedea în Rust. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%0A%20%20%20%20match%20x%20%7B%0A%20%20%20%20%20%20%20%200%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20zero%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20match%20against%20multiple%20values%0A%20%20%20%20%20%20%20%201%20%7C%202%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%201%20or%202!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20match%20against%20ranges%0A%20%20%20%20%20%20%20%203..%3D9%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20a%20number%203%20to%209%20inclusively%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20bind%20the%20matched%20number%20to%20a%20variable%0A%20%20%20%20%20%20%20%20matched_num%20%40%2010..%3D100%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20%7B%7D%20number%20between%2010%20to%20100!%22%2C%20matched_num)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20this%20is%20the%20default%20match%20that%20must%20exist%20if%20not%20all%20cases%20are%20handled%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20something%20else!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A +- title: Returnarea unor valori dintr-o bucla + content_markdown: | + `loop` poate fi oprit pentru a returna o valoare. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20let%20v%20%3D%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2013%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%20%22found%20the%2013%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22from%20loop%3A%20%7B%7D%22%2C%20v)%3B%0A%7D%0A +- title: Returnarea unor valori din expresii block + content_markdown: > + `if`-urile, `match`-urile, funcțiile și scope block-urile au un mod unic de + a returna valori în Rust. + + + Dacă ultima instrucțiune din interiorul unui/unei `if`, `match`, funcții sau scope block este o + expresie fără + + `;`, Rust o va returna sub forma unei valori din acel block. Acesta + + este un mod foarte bun de a creea logică concisă care returnează o valoare care poate fi pusă + într-o + + variabilă nouă. + + + Observăm cum acest lucru permite unui `if` să opereze ca o expresie ternară concisă. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20example()%20-%3E%20i32%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20%2F%2F%20Rust's%20ternary%20expression%0A%20%20%20%20let%20v%20%3D%20if%20x%20%3C%2042%20%7B%20-1%20%7D%20else%20%7B%201%20%7D%3B%0A%20%20%20%20println!(%22from%20if%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20let%20food%20%3D%20%22hamburger%22%3B%0A%20%20%20%20let%20result%20%3D%20match%20food%20%7B%0A%20%20%20%20%20%20%20%20%22hotdog%22%20%3D%3E%20%22is%20hotdog%22%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20notice%20the%20braces%20are%20optional%20when%20its%20just%20a%20single%20return%20expression%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%22is%20not%20hotdog%22%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22identifying%20food%3A%20%7B%7D%22%2C%20result)%3B%0A%0A%20%20%20%20let%20v%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20scope%20block%20lets%20us%20get%20a%20result%20without%20polluting%20function%20scope%0A%20%20%20%20%20%20%20%20let%20a%20%3D%201%3B%0A%20%20%20%20%20%20%20%20let%20b%20%3D%202%3B%0A%20%20%20%20%20%20%20%20a%20%2B%20b%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22from%20block%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20%2F%2F%20The%20idiomatic%20way%20to%20return%20a%20value%20in%20rust%20from%20a%20function%20at%20the%20end%0A%20%20%20%20v%20%2B%204%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%22from%20function%3A%20%7B%7D%22%2C%20example())%3B%0A%7D%0A +- title: Capitolul 2 - Incheiere + content_markdown: > + Sper că ți-am arătat o părticică din puterea Rust-ului chiar și prin cele mai + + simple caracteristici ale unui limbaj de programare. Vom vorbi despre `for` și + + `match` și mai profund pe măsură ce acumulăm mai multe cunoștințe care + + ne pot ajuta să ne folosim de capabilitățile lor. În cele ce urmează o să aruncăm o privire peste structurile + de date fundamentale + + din Rust. From 5f21f42f229222efd079c8b6a6c1738b48f0bd74 Mon Sep 17 00:00:00 2001 From: RaresCon Date: Mon, 16 Jan 2023 23:59:18 +0200 Subject: [PATCH 3/6] Translated the fourth chapter of the Rust tour --- lessons/ro/chapter_3.yaml | 156 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 lessons/ro/chapter_3.yaml diff --git a/lessons/ro/chapter_3.yaml b/lessons/ro/chapter_3.yaml new file mode 100644 index 000000000..8aaf0b6f5 --- /dev/null +++ b/lessons/ro/chapter_3.yaml @@ -0,0 +1,156 @@ +- title: Capitolul 3 - Tipuri de structuri de date basic + content_markdown: > + Este timpul să explorăm tipuri de date dincolo de cele de bază! În acest capitol o să aruncăm o privire peste + cele mai primitive + + structuri de date din Rust, punând accent pe reprezentarea lor în + memorie. Cred + + c-o să-ți placă cum Rust ascunde foarte puține despre cum funcționează lucrurile. +- title: Structuri + content_markdown: > + Un `struct` este o colecție de field-uri. + + + *Field*-urile sunt pe scurt date asociate unei structuri. Valorile lor + pot fi de tip primitiv sau o structură de date. + + + Definiția structurii este ca o matriță pentru compilator pentru a ști cum să aranjeze + field-urile în memorie într-un mod compact. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20%2F%2F%20String%20is%20a%20struct%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D +- title: Apelarea metodelor + content_markdown: > + Spre deosebire de funcții, metodele sunt funcții asociate unui tip specific + de date. + + + **metode statice** — metode care aparțin unui tip de date și sunt apelate folosind + operatorul `::`. + + + **metode ale instanței** — metode care aparțin unei instanțe a unui tip de date și sunt + apelate folosind operatorul `.`. + + + Vom dezvolta acest concept cu implementarea propriilor metode în capitole viitoare. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Using%20a%20static%20method%20to%20create%20an%20instance%20of%20String%0A%20%20%20%20let%20s%20%3D%20String%3A%3Afrom(%22Hello%20world!%22)%3B%0A%20%20%20%20%2F%2F%20Using%20a%20method%20on%20the%20instance%0A%20%20%20%20println!(%22%7B%7D%20is%20%7B%7D%20characters%20long.%22%2C%20s%2C%20s.len())%3B%0A%7D%0A +- title: Memorie + content_markdown: > + Aplicațiile scrise în Rust au 3 zone de memorie unde este stocată informație: + + * **data memory** - pentru date care sunt de dimensiune fixă și sunt **statice** (ex: + mereu disponibile pe toată durata rulării aplicației). + Spre exemplu, textul din programul tău (ex: "Hello World!"): Memoria ocupată (bytes) de acest text este citită dintr-un singur loc în cod + deci poate fi stocat în această zonă de memorie. Compilatoarele fac o groază de optimizări + pentru acest tip de date și folosirea lor în general este considerată foarte rapidă, pentru că + locația lor este cunoscută și fixă. + * **stack memory (stivă)** - pentru date declarate ca variabile în interiorul unei + funcții. + Locația în memorie a acestor date nu se schimbă pe durata apelului funcției; datorită acestui lucru compilatoarele + pot optimiza codul astfel încât datele din stivă se accesează foarte rapid. + * **heap memory (heap)** - pentru informație care este creată în timp ce aplicația + rulează. + Datele în această zonă de memorie pot fi adăugate, mutate, șterse, redimensionate, etc. Din cauza + naturii sale dinamice, este în general considerată mai lentă, dar această zonă permite + utilizări mult mai creative ale memoriei. Când adăugăm date în această zonă de memorie, + numim această operație **alocare (de memorie)**. Când eliberăm date din această zonă de memorie, numim această operație + **dealocare (de memorie)**. +- title: Crearea datelor în Memorie + content_markdown: > + Când **instanțiem** un **struct** în codul nostru, aplicația creează + field-urile de date unul lângă altul în memorie. + + + Instanțiem un struct specificând toate valorile field-urilor în interiorul + + + `StructName { ... }`. + + + Field-urile unui struct sunt accesate folosind operatorul `.`. + + + Detalii despre memorie în exemplul nostru: + + * Textul din interiorul ghilimelelor este informație read-only (ex: "Ferris"), deci acesta + este + pus în zona *data memory*. + * Apelul funcției `String::from` creează un struct de tip `String` care este pus + unul + lângă altul cu field-urile struct-ului SeaCreature în *stivă*. Un String reprezintă text care poate fi modificat + și face acest lucru prin intermediul următoarelor aspecte: + 1. Alocă memorie pe *heap* pentru text unde va putea fi modificat + 2. Stochează o referință la acea locație de pe *heap* în struct-ul `String` + (Mai multe despre acest concept în următoarele lecții) + * Așadar, cei doi prieteni ai noștri, *Ferris* și *Sarah*, sunt date care + vor avea mereu + locații fixe în aplicația noastră, deci vor fi puși în *stivă*. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20SeaCreature%27s%20data%20is%20on%20stack%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20String%20struct%20is%20also%20on%20stack%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20but%20holds%20a%20reference%20to%20data%20on%20heap%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22crab%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22claw%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20let%20sarah%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22octopus%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Sarah%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%208%2C%0A%20%20%20%20%20%20%20%20legs%3A%200%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22brain%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20is%20a%20%7B%7D.%20They%20have%20%7B%7D%20arms%2C%20%7B%7D%20legs%2C%20and%20a%20%7B%7D%20weapon%22%2C%0A%20%20%20%20%20%20%20%20ferris.name%2C%20ferris.animal_type%2C%20ferris.arms%2C%20ferris.legs%2C%20ferris.weapon%0A%20%20%20%20)%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20is%20a%20%7B%7D.%20They%20have%20%7B%7D%20arms%2C%20and%20%7B%7D%20legs.%20They%20have%20no%20weapon..%22%2C%0A%20%20%20%20%20%20%20%20sarah.name%2C%20sarah.animal_type%2C%20sarah.arms%2C%20sarah.legs%0A%20%20%20%20)%3B%0A%7D%0A +- title: Struct-uri asemănătoare tuplurilor + content_markdown: | + Pentru a fi conciși, poți creea struct-uri care sunt folosite asemănător unor tupluri. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Location(i32%2C%20i32)%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20This%20is%20still%20a%20struct%20on%20a%20stack%0A%20%20%20%20let%20loc%20%3D%20Location(42%2C%2032)%3B%0A%20%20%20%20println!(%22%7B%7D%2C%20%7B%7D%22%2C%20loc.0%2C%20loc.1)%3B%0A%7D%0A +- title: Struct-uri asemănătoare unit-urilor + content_markdown: > + Struct-urile nu trebuie neapărat să aibă field-uri. + + + După cum am menționat în Capitolul 1, un *unit* este o altă denumire pentru un tuplu gol, `()`. + De aceea, acest tip de struct-uri se numește *Unit-like*. + + + Acest tip de struct-uri este folosit rar. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Marker%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20_m%20%3D%20Marker%3B%0A%7D%0A +- title: Enumerații + content_markdown: > + Enumerațiile îți permit să creezi un tip nou de date care poate avea o valoare dintr-o + mulțime de elemente prestabilite folosind cuvântul cheie `enum`. + + + `match` ne ajută să abordăm toate valorile posibile ale unui enum, făcând din acest tip + o unealtă importantă în ceea ce privește scrierea codului de calitate. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20this%20line%20prevents%20compiler%20warnings%0A%0Aenum%20Species%20%7B%0A%20%20%20%20Crab%2C%0A%20%20%20%20Octopus%2C%0A%20%20%20%20Fish%2C%0A%20%20%20%20Clam%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22claw%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20println!(%22%7B%7D%20is%20a%20crab%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AOctopus%20%3D%3E%20println!(%22%7B%7D%20is%20a%20octopus%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AFish%20%3D%3E%20println!(%22%7B%7D%20is%20a%20fish%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AClam%20%3D%3E%20println!(%22%7B%7D%20is%20a%20clam%22%2Cferris.name)%2C%0A%20%20%20%20%7D%0A%7D%0A +- title: Enumerațiile care conțin tipuri de Date + content_markdown: > + Elementele unui `enum` pot avea de asemenea unul sau mai multe tipuri de date, permițându-i acestuia să se comporte + ca un *union* din limbajul C. + + + Atunci când un `enum` este utilizat într-un `match`, poți lega un nume de variabilă + la fiecare valoare din `enum`. + + + Detalii despre memorie pentru un `enum`: + + * O variabilă egalată cu o valoare provenită dintr-un enum va avea dimensiunea în memorie egală cu cea a elementului care ocupă dimensiunea maximă + Acest lucru asigură faptul că orice valoare posibilă va încăpea în aceeași dimensiune din memorie. + + * Pe lângă tipul de date al unui element (dacă acesta are un tip), fiecare element are de asemenea asociată + o valoare numerică care reprezintă indexul acestuia în enum. + + + Alte detalii: + + * `enum`-ul din Rust este cunoscut și ca *uniune etichetată* (tagged union). + + * Combinarea mai multor tipuri de date pentru a creea unul nou este ceea ce îi face pe oameni + să afirme faptul că Rust are *tipuri algebrice*. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20this%20line%20prevents%20compiler%20warnings%0A%0Aenum%20Species%20%7B%20Crab%2C%20Octopus%2C%20Fish%2C%20Clam%20%7D%0Aenum%20PoisonType%20%7B%20Acidic%2C%20Painful%2C%20Lethal%20%7D%0Aenum%20Size%20%7B%20Big%2C%20Small%20%7D%0Aenum%20Weapon%20%7B%0A%20%20%20%20Claw(i32%2C%20Size)%2C%0A%20%20%20%20Poison(PoisonType)%2C%0A%20%20%20%20None%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20Weapon%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20SeaCreature's%20data%20is%20on%20stack%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20String%20struct%20is%20also%20on%20stack%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20but%20holds%20a%20reference%20to%20data%20on%20heap%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20Weapon%3A%3AClaw(2%2C%20Size%3A%3ASmall)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20match%20ferris.weapon%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Weapon%3A%3AClaw(num_claws%2Csize)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20size_description%20%3D%20match%20size%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ABig%20%3D%3E%20%22big%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ASmall%20%3D%3E%20%22small%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!(%22ferris%20is%20a%20crab%20with%20%7B%7D%20%7B%7D%20claws%22%2C%20num_claws%2C%20size_description)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20is%20a%20crab%20with%20some%20other%20weapon%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20is%20some%20other%20animal%22)%2C%0A%20%20%20%20%7D%0A%7D +- title: Capitolul 3 - Încheiere + content_markdown: > + Ce palpitant! Acum avem în sfârșit toate uneltele de bază pentru a reprezenta ideile noastre + ideile noastre în cod. Sper că acum + + putem vedea puțin din cum operațiile fundamentale din Rust funcționează armonios și + concis cu tipurile sale de date. În cele ce urmează o să vorbim despre + + un concept care atribuie tipurilor noastre de date și mai multă flexibilitate în reprezentare: + *genericitate* (generics). From 4b932148e584ee29ff6effd37d11d842709fb128 Mon Sep 17 00:00:00 2001 From: RaresCon Date: Tue, 17 Jan 2023 01:02:37 +0200 Subject: [PATCH 4/6] Translated the fifth chapter of the Rust tour --- lessons/ro/chapter_4.yaml | 223 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 lessons/ro/chapter_4.yaml diff --git a/lessons/ro/chapter_4.yaml b/lessons/ro/chapter_4.yaml new file mode 100644 index 000000000..5ae5f1d30 --- /dev/null +++ b/lessons/ro/chapter_4.yaml @@ -0,0 +1,223 @@ +- title: Capitolul 4 - Tipuri generice + content_markdown: > + Tipurile generice sunt incredibil de importante în Rust. Sunt folosite pentru a reprezentarea + reprezenta + + valori nullable (ex: variabile care poate nu au încă o valoare), abordarea + erorilor, + + colecții și multe altele! În această secțiune vom învăța despre + tipurile generice fundamentale + + pe care le vei folosi în majoritatea timpului. +- title: Ce sunt tipurile generice? + content_markdown: > + Tipurile generice ne permit să definim parțial un `struct` sau un `enum`, permițând + compiler-ului să creeze o versiune definită complet + + versiune definită complet la momentul compilării bazată pe modul în care am folosit codul. + + + În general, Rust poate deduce tipul final analizând instanțierea noastră, dar + dacă are nevoie de ajutor, + + poți oricând să instanțiezi explicit folosind operatorul `::`, cunoscut sub numele de + `turbofish` (e un bun prieten de-ai mei!). + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20A%20partially%20defined%20struct%20type%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20item%3A%20T%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Note%3A%20by%20using%20generic%20types%20here%2C%20we%20create%20compile-time%20created%20types.%20%0A%20%20%20%20%2F%2F%20Turbofish%20lets%20us%20be%20explicit.%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%2042%20%7D%3B%0A%20%20%20%20let%20bool_bag%20%3D%20BagOfHolding%3A%3A%3Cbool%3E%20%7B%20item%3A%20true%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Rust%20can%20infer%20types%20for%20generics%20too!%0A%20%20%20%20let%20float_bag%20%3D%20BagOfHolding%20%7B%20item%3A%203.14%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Note%3A%20never%20put%20a%20bag%20of%20holding%20in%20a%20bag%20of%20holding%20in%20real%20life%0A%20%20%20%20let%20bag_in_bag%20%3D%20BagOfHolding%20%7B%0A%20%20%20%20%20%20%20%20item%3A%20BagOfHolding%20%7B%20item%3A%20%22boom!%22%20%7D%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20i32_bag.item%2C%20bool_bag.item%2C%20float_bag.item%2C%20bag_in_bag.item.item%0A%20%20%20%20)%3B%0A%7D%0A +- title: Reprezentarea nimicului + content_markdown: > + În alte limbaje, cuvântul cheie `null` este folosit pentru a reprezenta absența unei + valori. El creează + + dificultăți în limbajele de programare, pentru ca este posibil ca aplicația noastră + să eșueze + + când interacțioează cu o variabilă sau un field de acest tip. + + + Rust nu are tipul `null`, dar nu este ignorant când vine vorba de importanța + reprezentării nimicului! + + Gandește-te la o reprezentare naivă folosind o unealtă pe care o cunoaștem deja. + + + Alternativa `None` (ex: match) pentru una sau + mai multe valori care pot varia este așa de + + des întâlnită în Rust din cauza lipsei unei valori `null`. Tipurile generice ne ajută însă + să trecem de acest obstacol. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=enum%20Item%20%7B%0A%20%20%20%20Inventory(String)%2C%0A%20%20%20%20%2F%2F%20None%20represents%20the%20absence%20of%20an%20item%0A%20%20%20%20None%2C%0A%7D%0A%0Astruct%20BagOfHolding%20%7B%0A%20%20%20%20item%3A%20Item%2C%0A%7D%0A +- title: Option + content_markdown: > + Rust are un enum deja implementat numit `Option` care ne permite să reprezentăm + valori care pot fi nule (nullable) + + fără să folosim `null`. + + + ``` + + enum Option { + None, + Some(T), + } + + ``` + + + Acest enum este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul + elementelor din enum `Some` și `None`. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20A%20partially%20defined%20struct%20type%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20%2F%2F%20Our%20parameter%20type%20T%20can%20be%20handed%20to%20others%0A%20%20%20%20item%3A%20Option%3CT%3E%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Note%3A%20A%20bag%20for%20i32%2C%20holding%20nothing!%20We%20have%20to%20specify%20the%20type%0A%20%20%20%20%2F%2F%20because%20otherwise%20Rust%20would%20not%20know%20what%20type%20of%20bag%20it%20is.%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20None%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_none()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20nothing%20in%20the%20bag!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20something%20in%20the%20bag!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20Some(42)%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_some()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20something%20in%20the%20bag!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20nothing%20in%20the%20bag!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20match%20lets%20us%20deconstruct%20Option%20elegantly%20and%20ensure%20we%20handle%20all%20cases!%0A%20%20%20%20match%20i32_bag.item%20%7B%0A%20%20%20%20%20%20%20%20Some(v)%20%3D%3E%20println!(%22found%20%7B%7D%20in%20bag!%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20None%20%3D%3E%20println!(%22found%20nothing%22)%2C%0A%20%20%20%20%7D%0A%7D%0A +- title: Result + content_markdown: > + Rust are un enum deja implementat numit `Result` care ne permite să returnăm + o valoare care poate eșua în cadrul unei instrucțiuni. + + Este modalitatea idiomatică în care limbajul Rust tratează posibilele erori. + + + ``` + + enum Result { + Ok(T), + Err(E), + } + + ``` + + + Observăm ca aceste tipuri generice au multiple *tipuri parametrizate* separate de + o virgulă. + + + Acest enum este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul + elementelor din enum `Ok` și `Err`. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3Ai32)%20-%3E%20Result%3Cf32%2CString%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20%2F%2F%20match%20lets%20us%20deconstruct%20Result%20elegantly%20and%20ensure%20we%20handle%20all%20cases!%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22found%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(e)%20%3D%3E%20println!(%22Error%3A%20%7B%7D%22%2Ce)%2C%0A%20%20%20%20%7D%0A%7D%0A +- title: Main-ul care poate eșua + content_markdown: | + `main` are capacitatea de a returna un `Result`! + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Main%20returns%20no%20value%2C%20but%20could%20return%20an%20error!%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22found%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(_e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20handle%20this%20error%20gracefully%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20return%20a%20new%20error%20from%20main%20that%20said%20what%20happened!%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20Err(String%3A%3Afrom(%22something%20went%20wrong%20in%20main!%22))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Notice%20we%20use%20a%20unit%20value%20inside%20a%20Result%20Ok%0A%20%20%20%20%2F%2F%20to%20represent%20everything%20is%20fine%0A%20%20%20%20Ok(())%0A%7D%0A +- title: Gestionare grațioasă a erorilor + content_markdown: > + `Result` e atât de des întâlnit încât Rust are un operator important, `?`, pentru a le + gestiona. Următoarele două afirmații sunt echivalente: + + + ``` + + do_something_that_might_fail()? + + ``` + + + ``` + + match do_something_that_might_fail() { + Ok(v) => v, + Err(e) => return Err(e), + } + + ``` + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20Look%20at%20how%20much%20code%20we%20saved!%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42)%3F%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20Ok(())%0A%7D%0A +- title: Gestionarea dizgrațioasă a Option/Result + content_markdown: > + Folosirea `Option`/`Result` poate fi obositoare când încerci doar să + scrii rapid niște cod. Și `Option`, și `Result` are o + + funcție numită `unwrap` care poate fi utilă pentru a primi o valoare rapid + și murdar. `unwrap` va: + + 1. lua valoare din Option/Result + + 2. dacă enum-ul este de tip None/Err, `panic!` + + + Următoarele bucăți de cod sunt echivalente: + + + ``` + + my_option.unwrap() + + ``` + + + ``` + + match my_option { + Some(v) => v, + None => panic!("some error message generated by Rust!"), + } + + ``` + + + Analogie: + + + ``` + + my_result.unwrap() + + ``` + + + ``` + + match my_result { + Ok(v) => v, + Err(e) => panic!("some error message generated by Rust!"), + } + + ``` + + + Fii un bun rustaceu și folosește-te de `match` când poți face asta! + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20concise%20but%20assumptive%20and%20gets%20ugly%20fast%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42).unwrap()%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20this%20will%20panic!%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(1).unwrap()%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20Ok(())%0A%7D%0A +- title: Vectori + content_markdown: > + Unele din cele mai utile tipuri generice sunt colecțiile. Un vector este o + listă de dimensiune variabilă de elemente + + reprezentate de struct-ul `Vec`. + + + Macro-ul `vec!` ne permite să creem ușor un vector mai degrabă decât + să construim manual unul. + + + `Vec` are metoda `iter()` care creează un iterator dintr-un vector, + astfel fiind foarte ușor să + + punem un vector în interiorul unei bucle `for`. + + + Detalii despre memorie: + + * `Vec` este un struct, dar intern el conține o referință la o listă cu capacitate fixă + ale elementelor sale pe heap + + * Un vector începe cu o capacitate default; când sunt adăugate mai multe elemente decât poate + poate conține, acesta + realocă elementele sale pe heap pentru a avea o nouă listă cu capacitate fixă mai mare. + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20We%20can%20be%20explicit%20with%20type%0A%20%20%20%20let%20mut%20i32_vec%20%3D%20Vec%3A%3A%3Ci32%3E%3A%3Anew()%3B%20%2F%2F%20turbofish%20%3C3%0A%20%20%20%20i32_vec.push(1)%3B%0A%20%20%20%20i32_vec.push(2)%3B%0A%20%20%20%20i32_vec.push(3)%3B%0A%0A%20%20%20%20%2F%2F%20But%20look%20how%20clever%20Rust%20is%20about%20determining%20the%20type%20automatically%0A%20%20%20%20let%20mut%20float_vec%20%3D%20Vec%3A%3Anew()%3B%0A%20%20%20%20float_vec.push(1.3)%3B%0A%20%20%20%20float_vec.push(2.3)%3B%0A%20%20%20%20float_vec.push(3.4)%3B%0A%0A%20%20%20%20%2F%2F%20That's%20a%20beautiful%20macro!%0A%20%20%20%20let%20string_vec%20%3D%20vec!%5BString%3A%3Afrom(%22Hello%22)%2C%20String%3A%3Afrom(%22World%22)%5D%3B%0A%0A%20%20%20%20for%20word%20in%20string_vec.iter()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20word)%3B%0A%20%20%20%20%7D%0A%7D%0A +- title: Capitolul 4 - Incheiere + content_markdown: > + Într-un singur capitol, am învățat câtă putere ne oferă tipurile generice! Nu te + îngrijora dacă nu + + știi încă pe deplin cum să folosești tot ce ai văzut în acest capitol, deocamdată este bine doar să fii conștient + de aceste concepte majore pe care + + le vei vedea des în cod. Funcțiile noastre devin destul de lungi! În următorul + capitol vom + + vorbi despre un alt concept important în Rust: proprietatea datelor (data ownership). From 0b685705952ad8a51515a3de8208de0cbc4cd85e Mon Sep 17 00:00:00 2001 From: RaresCon Date: Tue, 17 Jan 2023 13:31:28 +0200 Subject: [PATCH 5/6] Fixed addressing mistakes and translated Rust Playground snippets I translated all code snippets from Rust Playground and fixed all addressing mistakes (I hope) in Chapters 1-4. I will no longer add new Chapters in this PR, as I will open a new PR for each new chapter. --- lessons/ro/chapter_1.yaml | 58 +++++++++++++++++++-------------------- lessons/ro/chapter_2.yaml | 43 ++++++++++++++--------------- lessons/ro/chapter_3.yaml | 30 ++++++++++---------- lessons/ro/chapter_4.yaml | 56 ++++++++++++++++++------------------- 4 files changed, 93 insertions(+), 94 deletions(-) diff --git a/lessons/ro/chapter_1.yaml b/lessons/ro/chapter_1.yaml index a5ee9e89e..4de1d2c5c 100644 --- a/lessons/ro/chapter_1.yaml +++ b/lessons/ro/chapter_1.yaml @@ -2,26 +2,26 @@ content_markdown: > În acest prim capitol vom explora ideile și conceptele de bază despre funcții, variabile și cele mai primitive tipuri de date. Ne bucurăm că - ne ești alături! + ne sunteți alături! - De asemenea, în cazul în care te întrebai cine este crabul adorabil care - îți vorbește, mă numesc **Ferris**, + De asemenea, în cazul în care vă întrebați cine este crabul adorabil care + vă vorbește, mă numesc **Ferris**, mascota neoficială a limbajului Rust. Încântat de cunoștință! - Odată ce te vei familiariza cu Rust, poți să te declari un **Rustaceu**. Așa + Odată ce vă veți familiariza cu Rust, puteți să vă declarați un **Rustaceu**. Așa se numesc toți oamenii care folosesc, contribuie sau sunt interesați de Rust. - title: The Rust Playground code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20println!(%22Welcome%20to%20the%20playground!%20You%20can%20modify%20the%20code%20in%20here.%22)%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20println!(%22Bun%20venit%20în%20locul%20de%20joacă!%20Puteți%20modifica%20codul%20aici.%22)%3B%0A%7D%0A content_markdown: > - În acest curs veți utiliza un coding tool interactiv [Rust + În acest curs veți folosi un utilitar interactiv pentru scrierea codului [Rust Playground](https://play.rust-lang.org). - E o modalitate bună de a te juca cu Rust și a arăta altora - creativitatea și provocările tale! + E o modalitate bună de a vă juca cu Rust și a arăta altora + creativitatea și provocările dumneavoastră! - title: Variabile code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20rust%20infers%20the%20type%20of%20x%0A%20%20%20%20let%20x%20%3D%2013%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%0A%20%20%20%20%2F%2F%20rust%20can%20also%20be%20explicit%20about%20the%20type%0A%20%20%20%20let%20x%3A%20f64%20%3D%203.14159%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%0A%20%20%20%20%2F%2F%20rust%20can%20also%20declare%20and%20initialize%20later%2C%20but%20this%20is%20rarely%20done%0A%20%20%20%20let%20x%3B%0A%20%20%20%20x%20%3D%200%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A @@ -32,7 +32,7 @@ Atunci când dai unei variabile o valoare, Rust este capabil să deducă tipul acesteia în 99% - din cazuri. Dacă acesta nu poate, poți adăuga tipul de date la declarare variabilei. + din cazuri. Dacă acesta nu poate, puteți adăuga tipul de date la declararea variabilei. Observați cum putem să dăm valori aceluiași nume de variabilă de mai multe ori. Acest @@ -42,7 +42,7 @@ la acel nume de variabilă. - Numele de variabile sunt mereu scrisă sub formă `snake_case` (ex: my_first_variable). + Numele de variabile sunt mereu scrise sub formă `snake_case` (ex: my_first_variable). - title: Modificarea variabilelor code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%2042%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20x%20%3D%2013%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A @@ -62,12 +62,12 @@ O să revenim pentru a vorbi mai multe despre acest concept, dar deocamdată doar fiți - atenți la acest cuvânt cheie. + atent la acest cuvânt cheie. - title: Tipuri de date de bază code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2012%3B%20%2F%2F%20by%20default%20this%20is%20i32%0A%20%20%20%20let%20a%20%3D%2012u8%3B%0A%20%20%20%20let%20b%20%3D%204.3%3B%20%2F%2F%20by%20default%20this%20is%20f64%0A%20%20%20%20let%20c%20%3D%204.3f32%3B%0A%20%20%20%20let%20bv%20%3D%20true%3B%0A%20%20%20%20let%20t%20%3D%20(13%2C%20false)%3B%0A%20%20%20%20let%20sentence%20%3D%20%22hello%20world!%22%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20x%2C%20a%2C%20b%2C%20c%2C%20bv%2C%20t.0%2C%20t.1%2C%20sentence%0A%20%20%20%20)%3B%0A%7D%0A content_markdown: > - Rust are o varietate de tipuri de date familiare ție: + Rust are o varietate de tipuri de date familiare dumneavoastră: * booleans - `bool` pentru a reprezenta adevărat și fals @@ -88,16 +88,16 @@ * arrays - `[value, value, ...]` o colecție cu dimensiune fixă de elemente similare cunoscută la momentul compilării - * slices - o colecție de elemente similare cu dimensiune cunoscută în timpul rulării + * slices - o colecție cu dimensiune cunoscută în timpul rulării de elemente similare * `str`(string slice) - text de lungime cunoscută în timpul rulării - Text s-ar putea să fie mai complex în Rust față de alte limbaje de programare cu care ești obșnuit; + Sintaxa s-ar putea să fie mai complexă în Rust față de alte limbaje de programare cu care sunteți obișnuit; - având în vedere că Rust este un limbaj de programare a sistemului, îi pasă de probleme legate + având în vedere că Rust este un limbaj de programare pentru sisteme, îi pasă de probleme legate - de memorie cu care s-ar putea să nu fi obișnuit. O să aprofundăm aceste lucruri mai târziu. + de memorie cu care s-ar putea să nu fiți obișnuit. O să aprofundăm aceste lucruri mai târziu. Tipurile numerice pot fi impuse prin adăugarea la finalul unui număr (ex: `13u32`, `2u8`). @@ -105,14 +105,14 @@ code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%2013u8%3B%0A%20%20%20%20let%20b%20%3D%207u32%3B%0A%20%20%20%20let%20c%20%3D%20a%20as%20u32%20%2B%20b%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20c)%3B%0A%0A%20%20%20%20let%20t%20%3D%20true%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20t%20as%20u8)%3B%0A%7D%0A content_markdown: > - Rust are nevoie de explicitate când vine vorba de tipurile numerice. Nu poți + Rust are nevoie de explicitate când vine vorba de tipurile numerice. Nu puteți folosi un `u8` pentru un `u32` în mod neglijent fără apariția unei erori. - Din fericire Rust poate face conversia de la un tip numeric la altul foarte ușor + Din fericire, Rust poate face conversia de la un tip numeric la altul foarte ușor folosind cuvântul cheie **as**. - title: Constante code: >- @@ -120,7 +120,7 @@ content_markdown: > Constantele ne permit să specificăm o valoare folosită uzual de-a lungul - codului nostru în mod eficient. În loc să copiem valori folosind variabile + codului nostru în mod eficient. În loc să copiem valori folosind variabile acolo unde sunt folosite, constantele înlocuiesc direct numele lor cu valoarea @@ -148,7 +148,7 @@ index *usize* (începând cu 0) al elementului pe care dorești să îl accesezi. - Colecțiile cu dimensiune dinamică, deseori numite array-uri dinamice sau variabile, îți + Colecțiile cu dimensiune dinamică, deseori numite array-uri dinamice sau variabile, vă vor fi prezentate într-un capitol viitor numit **Vectori**. - title: Funcții code: >- @@ -161,20 +161,20 @@ (signed integer cu dimensiune de 32 de biți). - Dacă vrei să returnezi o valoare sau expresie, poți folosi cuvântul cheie `return` + Dacă vreți să returnați o valoare sau expresie, puteți folosi cuvântul cheie `return` și punct și virgula la final, așa cum am făcut în funcția *subtract*. Numele funcțiilor sunt mereu scrise în format `snake_case`. - Hint: dacă definești o funcție, datele pe care le admite se numesc parametrii. - Dacă folosești o funcție și îi transmiți niște date, atunci ele se numesc argumente. + Hint: dacă definiți o funcție, datele pe care le admite se numesc parametrii. + Dacă folosiți o funcție și îi transmiteți niște date, atunci ele se numesc argumente. - title: Returnarea mai multor valori code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20swap(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20(i32%2C%20i32)%20%7B%0A%20%20%20%20return%20(y%2C%20x)%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20return%20a%20tuple%20of%20return%20values%0A%20%20%20%20let%20result%20%3D%20swap(123%2C%20321)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20result.0%2C%20result.1)%3B%0A%0A%20%20%20%20%2F%2F%20destructure%20the%20tuple%20into%20two%20variables%20names%0A%20%20%20%20let%20(a%2C%20b)%20%3D%20swap(result.0%2C%20result.1)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20b)%3B%0A%7D%0A content_markdown: > - Funcțiile pot returna mai multe valori prin returnarea unui **tuple** (tuplu) + Funcțiile pot returna mai multe valori prin returnarea unui **tuplu** (tuple) de valori. @@ -185,17 +185,17 @@ Rust suportă diferite tipuri de destructurări pe care le vom vedea în multe contexte, permințându-ne - să extragem fracțiuni ale unor structuri de date în moduri ingenioase. Fii pe fază! + să extragem fracțiuni ale unor structuri de date în moduri ingenioase. Fiți pe fază! - title: Returnarea content_markdown: > Dacă pentru o funcție nu se specifică ce tip returnează, aceasta va returna un tuplu gol, - cunoscut și sub numele de *unit* (unitate). + cunoscut și sub numele de *unitate* (unit). Un tuplu gol este reprezentat de `()`. - Folosirea unui `()` nu este des întâlnită, dar va apărea de suficiente ori, deci este bine să știi + Folosirea unui `()` nu este des întâlnită, dar va apărea de suficiente ori, deci este bine să știți ce se întâmplă. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20make_nothing()%20-%3E%20()%20%7B%0A%20%20%20%20return%20()%3B%0A%7D%0A%0A%2F%2F%20the%20return%20type%20is%20implied%20as%20()%0Afn%20make_nothing2()%20%7B%0A%20%20%20%20%2F%2F%20this%20function%20will%20return%20()%20if%20nothing%20is%20specified%20to%20return%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%20make_nothing()%3B%0A%20%20%20%20let%20b%20%3D%20make_nothing2()%3B%0A%0A%20%20%20%20%2F%2F%20Printing%20a%20debug%20string%20for%20a%20and%20b%0A%20%20%20%20%2F%2F%20Because%20it's%20hard%20to%20print%20nothingness%0A%20%20%20%20println!(%22The%20value%20of%20a%3A%20%7B%3A%3F%7D%22%2C%20a)%3B%0A%20%20%20%20println!(%22The%20value%20of%20b%3A%20%7B%3A%3F%7D%22%2C%20b)%3B%0A%7D%0A @@ -204,12 +204,12 @@ Până acu', e bine! Bazele Rust-ului nu sunt așa de rele, nu-i așa? Am aruncat o privire modului în care gândește compilatorul de Rust. Fiind un limbaj de programare - a sistemului + pentru sisteme acesta ține mult la dimensiunea valorilor în memorie, fie că pot fi modificate sau nu, - și la faptul că matematica pe care o aplici este cea corectă. În cele ce urmează, ne vom + și la corectitudinea matematicii pe care o aplicați. În cele ce urmează, ne vom întâlni cu niște vechi prieteni: teste `if` și bucle `for`. diff --git a/lessons/ro/chapter_2.yaml b/lessons/ro/chapter_2.yaml index 581c0899c..f8e87dfd3 100644 --- a/lessons/ro/chapter_2.yaml +++ b/lessons/ro/chapter_2.yaml @@ -2,10 +2,10 @@ content_markdown: > În acest capitol vom vorbi despre metodele de control basic al flow-ului în Rust. - Dacă ești familiar cu limbaje bazate pe C, o să te simți ca acasă și + Dacă sunteți familiar cu limbaje bazate pe C, o să vă simțiți ca acasă și poate - te vei bucura de o surpriză sau două. + vă veți bucura de o surpriză sau două. - title: if/else content_markdown: > Ramificarea codului în Rust nu este surprinzătoare. @@ -18,25 +18,25 @@ În rest, toți operatorii relaționali și logici funcționează la fel: `==`, `!=`, `<`, `>`, `<=`, `>=`, `!`, `||`, `&&`. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20if%20x%20%3C%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22less%20than%2042%22)%3B%0A%20%20%20%20%7D%20else%20if%20x%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22is%2042%22)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22greater%20than%2042%22)%3B%0A%20%20%20%20%7D%0A%7D -- title: bucle + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20if%20x%20%3C%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22mai%20pu%C8%9Bin%20de%2042%22)%3B%0A%20%20%20%20%7D%20else%20if%20x%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20println!(%22egal%20cu%2042%22)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22mare%20mare%20de%2042%22)%3B%0A%20%20%20%20%7D%0A%7D +- title: Bucle content_markdown: | - Ai nevoie de o buclă infinită? + Aveți nevoie de o buclă infinită? Rust face asta într-un mod foarte simplu. - `break` te va arunca în afara buclei când ești pregătit. + `break` vă va arunca în afara buclei când sunteți pregătit. `loop` are un secret despre care vom vorbi curând. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%7D%0A - title: while content_markdown: | - `while` te lasă să adaugi o condiție logică unei bucle. + `while` vă lasă să adăugați o condiție logică unei bucle. Dacă condiția impusă buclei devine falsă, bucla se va termina. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20while%20x%20!%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%7D%0A%20%20%20%20println!(%22x%20is%20%7B%7D%22%2C%20x)%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20while%20x%20!%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%7D%0A%20%20%20%20println!(%22x%20este%20%7B%7D%22%2C%20x)%3B%0A%7D%0A - title: for content_markdown: > Bucla `for` din Rust e o îmbunătățire importantă. Ea @@ -44,13 +44,12 @@ iterează prin valorile oricărei expresii care poate fi transformată într-un iterator. Ce este - un iterator? Un iterator este un obiect pe care îl poți întreba "Care este - the + un iterator, vă întrebați? Un iterator este un obiect pe care îl puteți întreba "Care este următorul element pe care îl ai?" până când acesta nu mai are elemente. - Vom explora acest lucru într-un capitol viitor. Între timp, ține minte că Rust + Vom explora acest lucru într-un capitol viitor. Între timp, țineți minte că Rust poate creea ușor iteratori care generează o secvență de numere întregi. @@ -62,7 +61,7 @@ alt număr, fără să îl includă pe cel din urmă. - Operatorul `..=` creează un iterator care generează numere de la un număr + Operatorul `..=` creează un iterator care generează numere de la un număr pâna la alt număr, inclusiv cel din urmă. @@ -70,7 +69,7 @@ https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20for%20x%20in%200..5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20for%20x%20in%200..%3D5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%7D%0A - title: match content_markdown: > - Îți lipsește switch-ul din C? Rust are un cuvânt cheie incredibil de folositor + Vă lipsește switch-ul din C? Rust are un cuvânt cheie incredibil de folositor pentru îndeplinirea tuturor posibilităților unei valori și executarea unei bucăți de cod dacă o anumită @@ -78,7 +77,7 @@ posibilitate este adevărată. Hai să vedem cum merge asta pentru numere. Avem de discutat mai multe - în capitolele viitoare despre pattern matching pentru date mai complexe. Îți promit că + în capitolele viitoare despre pattern matching pentru date mai complexe. Vă promit că o să merite așteptarea. @@ -91,15 +90,15 @@ Matching combinat cu destructurarea datelor este de departe unul din - cele mai întâlnite pattern-uri pe care le vei vedea în Rust. + cele mai întâlnite pattern-uri pe care le veți vedea în Rust. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%0A%20%20%20%20match%20x%20%7B%0A%20%20%20%20%20%20%20%200%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20zero%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20match%20against%20multiple%20values%0A%20%20%20%20%20%20%20%201%20%7C%202%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%201%20or%202!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20match%20against%20ranges%0A%20%20%20%20%20%20%20%203..%3D9%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20a%20number%203%20to%209%20inclusively%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20can%20bind%20the%20matched%20number%20to%20a%20variable%0A%20%20%20%20%20%20%20%20matched_num%20%40%2010..%3D100%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20%7B%7D%20number%20between%2010%20to%20100!%22%2C%20matched_num)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20this%20is%20the%20default%20match%20that%20must%20exist%20if%20not%20all%20cases%20are%20handled%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22found%20something%20else!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%0A%20%20%20%20match%20x%20%7B%0A%20%20%20%20%20%20%20%200%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20zero%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20face%20un%20caz%20pentru%20mai%20multe%20valori%0A%20%20%20%20%20%20%20%201%20%7C%202%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%201%20sau%202!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20face%20un%20caz%20pentru%20o%20mul%C8%9Bime%0A%20%20%20%20%20%20%20%203..%3D9%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20un%20num%C4%83r%20%C3%AEntre%203%20%C8%99i%209%20inclusiv%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20pune%20num%C4%83rul%20care%20respect%C4%83%20cazul%20%C3%AEntr-o%20variabil%C4%83%0A%20%20%20%20%20%20%20%20matched_num%20%40%2010..%3D100%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20num%C4%83rul%20%7B%7D%20%C3%AEntre%2010%20%C8%99i%20100!%22%2C%20matched_num)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20acesta%20este%20cazul%20default%20care%20trebuie%20s%C4%83%20existe%20dac%C4%83%0A%20%20%20%20%20%20%20%20%2F%2F%20nu%20sunt%20abordate%20toate%20cazurile%20posibile%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20alt%20num%C4%83r!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A - title: Returnarea unor valori dintr-o bucla content_markdown: | `loop` poate fi oprit pentru a returna o valoare. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20let%20v%20%3D%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2013%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%20%22found%20the%2013%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22from%20loop%3A%20%7B%7D%22%2C%20v)%3B%0A%7D%0A -- title: Returnarea unor valori din expresii block + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20let%20v%20%3D%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2013%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%20%22am%20g%C4%83sit%2013%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22din%20bucl%C4%83%3A%20%7B%7D%22%2C%20v)%3B%0A%7D%0A +- title: Returnarea unor valori din expresii bloc content_markdown: > `if`-urile, `match`-urile, funcțiile și scope block-urile au un mod unic de a returna valori în Rust. @@ -108,7 +107,7 @@ Dacă ultima instrucțiune din interiorul unui/unei `if`, `match`, funcții sau scope block este o expresie fără - `;`, Rust o va returna sub forma unei valori din acel block. Acesta + `;`, Rust o va returna sub forma unei valori din acel bloc. Acesta este un mod foarte bun de a creea logică concisă care returnează o valoare care poate fi pusă într-o @@ -116,12 +115,12 @@ variabilă nouă. - Observăm cum acest lucru permite unui `if` să opereze ca o expresie ternară concisă. + Observăm cum acest lucru permite unui `if` să funcționeze ca operatorul ternar concis. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20example()%20-%3E%20i32%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20%2F%2F%20Rust's%20ternary%20expression%0A%20%20%20%20let%20v%20%3D%20if%20x%20%3C%2042%20%7B%20-1%20%7D%20else%20%7B%201%20%7D%3B%0A%20%20%20%20println!(%22from%20if%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20let%20food%20%3D%20%22hamburger%22%3B%0A%20%20%20%20let%20result%20%3D%20match%20food%20%7B%0A%20%20%20%20%20%20%20%20%22hotdog%22%20%3D%3E%20%22is%20hotdog%22%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20notice%20the%20braces%20are%20optional%20when%20its%20just%20a%20single%20return%20expression%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%22is%20not%20hotdog%22%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22identifying%20food%3A%20%7B%7D%22%2C%20result)%3B%0A%0A%20%20%20%20let%20v%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20scope%20block%20lets%20us%20get%20a%20result%20without%20polluting%20function%20scope%0A%20%20%20%20%20%20%20%20let%20a%20%3D%201%3B%0A%20%20%20%20%20%20%20%20let%20b%20%3D%202%3B%0A%20%20%20%20%20%20%20%20a%20%2B%20b%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22from%20block%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20%2F%2F%20The%20idiomatic%20way%20to%20return%20a%20value%20in%20rust%20from%20a%20function%20at%20the%20end%0A%20%20%20%20v%20%2B%204%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%22from%20function%3A%20%7B%7D%22%2C%20example())%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20example()%20-%3E%20i32%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%20%20%20%20%2F%2F%20operatorul%20ternar%20din%20Rust%0A%20%20%20%20let%20v%20%3D%20if%20x%20%3C%2042%20%7B%20-1%20%7D%20else%20%7B%201%20%7D%3B%0A%20%20%20%20println!(%22din%20if%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20let%20food%20%3D%20%22hamburger%22%3B%0A%20%20%20%20let%20result%20%3D%20match%20food%20%7B%0A%20%20%20%20%20%20%20%20%22hotdog%22%20%3D%3E%20%22este%20un%20hotdog%22%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20observa%C8%9Bi%20c%C4%83%20acoladele%20sunt%20op%C8%9Bionale%20c%C3%A2nd%20exist%C4%83%0A%20%20%20%20%20%20%20%20%2F%2F%20o%20expresie%20simpl%C4%83%20de%20returnare%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%22nu%20este%20un%20hotdog%22%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22tipul%20de%20m%C3%A2ncare%3A%20%7B%7D%22%2C%20result)%3B%0A%0A%20%20%20%20let%20v%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Acest%20scope%20block%20ne%20permite%20s%C4%83%20nu%20polu%C4%83m%20spa%C8%9Biul%20func%C8%9Biilor%0A%20%20%20%20%20%20%20%20let%20a%20%3D%201%3B%0A%20%20%20%20%20%20%20%20let%20b%20%3D%202%3B%0A%20%20%20%20%20%20%20%20a%20%2B%20b%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22din%20bloc%3A%20%7B%7D%22%2C%20v)%3B%0A%0A%20%20%20%20%2F%2F%20Modul%20idiomatic%20de%20a%20returna%20o%20valoare%20%C3%AEn%20Rust%20la%20sf%C3%A2%C8%99itul%20unei%20func%C8%9Bii%0A%20%20%20%20v%20%2B%204%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%22din%20func%C8%9Bie%3A%20%7B%7D%22%2C%20example())%3B%0A%7D%0A - title: Capitolul 2 - Incheiere content_markdown: > - Sper că ți-am arătat o părticică din puterea Rust-ului chiar și prin cele mai + Sper că v-am arătat o părticică din puterea Rust-ului chiar și prin cele mai simple caracteristici ale unui limbaj de programare. Vom vorbi despre `for` și diff --git a/lessons/ro/chapter_3.yaml b/lessons/ro/chapter_3.yaml index 8aaf0b6f5..320450676 100644 --- a/lessons/ro/chapter_3.yaml +++ b/lessons/ro/chapter_3.yaml @@ -6,7 +6,7 @@ structuri de date din Rust, punând accent pe reprezentarea lor în memorie. Cred - c-o să-ți placă cum Rust ascunde foarte puține despre cum funcționează lucrurile. + c-o să vă placă cum Rust ascunde foarte puține despre cum funcționează lucrurile. - title: Structuri content_markdown: > Un `struct` este o colecție de field-uri. @@ -19,7 +19,7 @@ Definiția structurii este ca o matriță pentru compilator pentru a ști cum să aranjeze field-urile în memorie într-un mod compact. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20%2F%2F%20String%20is%20a%20struct%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20%2F%2F%20String%20este%20un%20struct%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D - title: Apelarea metodelor content_markdown: > Spre deosebire de funcții, metodele sunt funcții asociate unui tip specific @@ -36,7 +36,7 @@ Vom dezvolta acest concept cu implementarea propriilor metode în capitole viitoare. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Using%20a%20static%20method%20to%20create%20an%20instance%20of%20String%0A%20%20%20%20let%20s%20%3D%20String%3A%3Afrom(%22Hello%20world!%22)%3B%0A%20%20%20%20%2F%2F%20Using%20a%20method%20on%20the%20instance%0A%20%20%20%20println!(%22%7B%7D%20is%20%7B%7D%20characters%20long.%22%2C%20s%2C%20s.len())%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Folosim%20o%20metod%C4%83%20static%C4%83%20ca%20s%C4%83%20creem%20o%20instan%C8%9B%C4%83%20String%0A%20%20%20%20let%20s%20%3D%20String%3A%3Afrom(%22Hello%20world!%22)%3B%0A%20%20%20%20%2F%2F%20Folosim%20o%20metod%C4%83%20a%20instan%C8%9Bei%0A%20%20%20%20println!(%22%7B%7D%20is%20%7B%7D%20characters%20long.%22%2C%20s%2C%20s.len())%3B%0A%7D%0A - title: Memorie content_markdown: > Aplicațiile scrise în Rust au 3 zone de memorie unde este stocată informație: @@ -87,20 +87,20 @@ (Mai multe despre acest concept în următoarele lecții) * Așadar, cei doi prieteni ai noștri, *Ferris* și *Sarah*, sunt date care vor avea mereu - locații fixe în aplicația noastră, deci vor fi puși în *stivă*. + valori fixe în aplicația noastră, deci vor fi puși în *stivă*. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20SeaCreature%27s%20data%20is%20on%20stack%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20String%20struct%20is%20also%20on%20stack%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20but%20holds%20a%20reference%20to%20data%20on%20heap%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22crab%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22claw%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20let%20sarah%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22octopus%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Sarah%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%208%2C%0A%20%20%20%20%20%20%20%20legs%3A%200%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22brain%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20is%20a%20%7B%7D.%20They%20have%20%7B%7D%20arms%2C%20%7B%7D%20legs%2C%20and%20a%20%7B%7D%20weapon%22%2C%0A%20%20%20%20%20%20%20%20ferris.name%2C%20ferris.animal_type%2C%20ferris.arms%2C%20ferris.legs%2C%20ferris.weapon%0A%20%20%20%20)%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20is%20a%20%7B%7D.%20They%20have%20%7B%7D%20arms%2C%20and%20%7B%7D%20legs.%20They%20have%20no%20weapon..%22%2C%0A%20%20%20%20%20%20%20%20sarah.name%2C%20sarah.animal_type%2C%20sarah.arms%2C%20sarah.legs%0A%20%20%20%20)%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20datele%20din%20SeaCreature%20sunt%20pe%20stiv%C4%83%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Struct-ul%20String%20este%20de%20asemenea%20pe%20stiv%C4%83%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20dar%20%C8%9Bine%20o%20referin%C8%9B%C4%83%20a%20informa%C8%9Biei%20pe%20heap%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22crab%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22ghiar%C4%83%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20let%20sarah%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22caracati%C8%9B%C4%83%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Sarah%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%208%2C%0A%20%20%20%20%20%20%20%20legs%3A%200%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22creier%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20este%20%7B%7D.%20Are%20%7B%7D%20m%C3%A2ini%2C%20%7B%7D%20picioare%2C%20%C8%99i%20%7B%7D%20pe%20post%20de%20arm%C4%83%22%2C%0A%20%20%20%20%20%20%20%20ferris.name%2C%20ferris.animal_type%2C%20ferris.arms%2C%20ferris.legs%2C%20ferris.weapon%0A%20%20%20%20)%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20este%20%7B%7D.%20Are%20%7B%7D%20m%C3%A2ini%2C%20%7B%7D%20picioare.%20Nu%20are%20nicio%20arm%C4%83..%22%2C%0A%20%20%20%20%20%20%20%20sarah.name%2C%20sarah.animal_type%2C%20sarah.arms%2C%20sarah.legs%0A%20%20%20%20)%3B%0A%7D%0A - title: Struct-uri asemănătoare tuplurilor content_markdown: | - Pentru a fi conciși, poți creea struct-uri care sunt folosite asemănător unor tupluri. + Pentru a fi conciși, puteți creea struct-uri care sunt folosite asemănător unor tupluri. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Location(i32%2C%20i32)%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20This%20is%20still%20a%20struct%20on%20a%20stack%0A%20%20%20%20let%20loc%20%3D%20Location(42%2C%2032)%3B%0A%20%20%20%20println!(%22%7B%7D%2C%20%7B%7D%22%2C%20loc.0%2C%20loc.1)%3B%0A%7D%0A -- title: Struct-uri asemănătoare unit-urilor + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Location(i32%2C%20i32)%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Acesta%20este%20tot%20un%20struct%20pe%20stiv%C4%83%0A%20%20%20%20let%20loc%20%3D%20Location(42%2C%2032)%3B%0A%20%20%20%20println!(%22%7B%7D%2C%20%7B%7D%22%2C%20loc.0%2C%20loc.1)%3B%0A%7D%0A +- title: Struct-uri asemănătoare unităților content_markdown: > Struct-urile nu trebuie neapărat să aibă field-uri. - După cum am menționat în Capitolul 1, un *unit* este o altă denumire pentru un tuplu gol, `()`. + După cum am menționat în Capitolul 1, o *unitate* este o altă denumire pentru un tuplu gol, `()`. De aceea, acest tip de struct-uri se numește *Unit-like*. @@ -109,21 +109,21 @@ https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Marker%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20_m%20%3D%20Marker%3B%0A%7D%0A - title: Enumerații content_markdown: > - Enumerațiile îți permit să creezi un tip nou de date care poate avea o valoare dintr-o + Enumerațiile vă permit să creați un tip nou de date care poate avea o valoare dintr-o mulțime de elemente prestabilite folosind cuvântul cheie `enum`. `match` ne ajută să abordăm toate valorile posibile ale unui enum, făcând din acest tip o unealtă importantă în ceea ce privește scrierea codului de calitate. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20this%20line%20prevents%20compiler%20warnings%0A%0Aenum%20Species%20%7B%0A%20%20%20%20Crab%2C%0A%20%20%20%20Octopus%2C%0A%20%20%20%20Fish%2C%0A%20%20%20%20Clam%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22claw%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20println!(%22%7B%7D%20is%20a%20crab%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AOctopus%20%3D%3E%20println!(%22%7B%7D%20is%20a%20octopus%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AFish%20%3D%3E%20println!(%22%7B%7D%20is%20a%20fish%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AClam%20%3D%3E%20println!(%22%7B%7D%20is%20a%20clam%22%2Cferris.name)%2C%0A%20%20%20%20%7D%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20aceast%C4%83%20linie%20opre%C8%99te%20avertiz%C4%83rile%20compilatorului%0A%0Aenum%20Species%20%7B%0A%20%20%20%20Crab%2C%0A%20%20%20%20Octopus%2C%0A%20%20%20%20Fish%2C%0A%20%20%20%20Clam%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22ghiar%C4%83%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20println!(%22%7B%7D%20este%20crab%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AOctopus%20%3D%3E%20println!(%22%7B%7D%20este%20caracati%C8%9B%C4%83%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AFish%20%3D%3E%20println!(%22%7B%7D%20este%20pe%C8%99te%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AClam%20%3D%3E%20println!(%22%7B%7D%20este%20scoic%C4%83%22%2Cferris.name)%2C%0A%20%20%20%20%7D%0A%7D%0A - title: Enumerațiile care conțin tipuri de Date content_markdown: > Elementele unui `enum` pot avea de asemenea unul sau mai multe tipuri de date, permițându-i acestuia să se comporte ca un *union* din limbajul C. - Atunci când un `enum` este utilizat într-un `match`, poți lega un nume de variabilă + Atunci când un `enum` este utilizat într-un `match`, puteți lega un nume de variabilă la fiecare valoare din `enum`. @@ -143,13 +143,13 @@ * Combinarea mai multor tipuri de date pentru a creea unul nou este ceea ce îi face pe oameni să afirme faptul că Rust are *tipuri algebrice*. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20this%20line%20prevents%20compiler%20warnings%0A%0Aenum%20Species%20%7B%20Crab%2C%20Octopus%2C%20Fish%2C%20Clam%20%7D%0Aenum%20PoisonType%20%7B%20Acidic%2C%20Painful%2C%20Lethal%20%7D%0Aenum%20Size%20%7B%20Big%2C%20Small%20%7D%0Aenum%20Weapon%20%7B%0A%20%20%20%20Claw(i32%2C%20Size)%2C%0A%20%20%20%20Poison(PoisonType)%2C%0A%20%20%20%20None%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20Weapon%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20SeaCreature's%20data%20is%20on%20stack%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20String%20struct%20is%20also%20on%20stack%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20but%20holds%20a%20reference%20to%20data%20on%20heap%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20Weapon%3A%3AClaw(2%2C%20Size%3A%3ASmall)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20match%20ferris.weapon%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Weapon%3A%3AClaw(num_claws%2Csize)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20size_description%20%3D%20match%20size%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ABig%20%3D%3E%20%22big%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ASmall%20%3D%3E%20%22small%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!(%22ferris%20is%20a%20crab%20with%20%7B%7D%20%7B%7D%20claws%22%2C%20num_claws%2C%20size_description)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20is%20a%20crab%20with%20some%20other%20weapon%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20is%20some%20other%20animal%22)%2C%0A%20%20%20%20%7D%0A%7D + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20aceast%C4%83%20linie%20opre%C8%99te%20avertiz%C4%83rile%20compilatorului%0A%0Aenum%20Species%20%7B%20Crab%2C%20Octopus%2C%20Fish%2C%20Clam%20%7D%0Aenum%20PoisonType%20%7B%20Acidic%2C%20Painful%2C%20Lethal%20%7D%0Aenum%20Size%20%7B%20Big%2C%20Small%20%7D%0Aenum%20Weapon%20%7B%0A%20%20%20%20Claw(i32%2C%20Size)%2C%0A%20%20%20%20Poison(PoisonType)%2C%0A%20%20%20%20None%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20Weapon%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20datele%20din%20SeaCreature%20sunt%20pe%20stiv%C4%83%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Struct-ul%20String%20este%20de%20asemenea%20pe%20stiv%C4%83%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20dar%20%C8%9Bine%20o%20referin%C8%9B%C4%83%20a%20informa%C8%9Biei%20pe%20heap%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20Weapon%3A%3AClaw(2%2C%20Size%3A%3ASmall)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20match%20ferris.weapon%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Weapon%3A%3AClaw(num_claws%2Csize)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20size_description%20%3D%20match%20size%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ABig%20%3D%3E%20%22mari%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Size%3A%3ASmall%20%3D%3E%20%22mici%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!(%22ferris%20este%20un%20crab%20cu%20%7B%7D%20ghiare%20%7B%7D%22%2C%20num_claws%2C%20size_description)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20este%20un%20crab%20cu%20alte%20arme%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20println!(%22ferris%20este%20alt%20animal%22)%2C%0A%20%20%20%20%7D%0A%7D - title: Capitolul 3 - Încheiere content_markdown: > - Ce palpitant! Acum avem în sfârșit toate uneltele de bază pentru a reprezenta ideile noastre + Ce palpitant! Acum avem în sfârșit toate uneltele de bază pentru a reprezenta ideile noastre în cod. Sper că acum - putem vedea puțin din cum operațiile fundamentale din Rust funcționează armonios și + putem vedea puțin din cum operațiile fundamentale din Rust funcționează armonios și în mod concis cu tipurile sale de date. În cele ce urmează o să vorbim despre un concept care atribuie tipurilor noastre de date și mai multă flexibilitate în reprezentare: diff --git a/lessons/ro/chapter_4.yaml b/lessons/ro/chapter_4.yaml index 5ae5f1d30..48a76b580 100644 --- a/lessons/ro/chapter_4.yaml +++ b/lessons/ro/chapter_4.yaml @@ -1,18 +1,18 @@ - title: Capitolul 4 - Tipuri generice content_markdown: > - Tipurile generice sunt incredibil de importante în Rust. Sunt folosite pentru a reprezentarea + Tipurile generice sunt incredibil de importante în Rust. Sunt folosite pentru a reprezenta - valori nullable (ex: variabile care poate nu au încă o valoare), abordarea + valori care pot fi nule (ex: variabile care poate nu au încă o valoare), abordarea erorilor, colecții și multe altele! În această secțiune vom învăța despre tipurile generice fundamentale - pe care le vei folosi în majoritatea timpului. + pe care le veți folosi în majoritatea timpului. - title: Ce sunt tipurile generice? content_markdown: > - Tipurile generice ne permit să definim parțial un `struct` sau un `enum`, permițând + Tipurile generice ne lasă să definim parțial un `struct` sau un `enum`, permițând compiler-ului să creeze o versiune definită complet versiune definită complet la momentul compilării bazată pe modul în care am folosit codul. @@ -21,25 +21,25 @@ În general, Rust poate deduce tipul final analizând instanțierea noastră, dar dacă are nevoie de ajutor, - poți oricând să instanțiezi explicit folosind operatorul `::`, cunoscut sub numele de + puteți oricând să instanțiați explicit folosind operatorul `::`, cunoscut sub numele de `turbofish` (e un bun prieten de-ai mei!). code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20A%20partially%20defined%20struct%20type%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20item%3A%20T%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Note%3A%20by%20using%20generic%20types%20here%2C%20we%20create%20compile-time%20created%20types.%20%0A%20%20%20%20%2F%2F%20Turbofish%20lets%20us%20be%20explicit.%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%2042%20%7D%3B%0A%20%20%20%20let%20bool_bag%20%3D%20BagOfHolding%3A%3A%3Cbool%3E%20%7B%20item%3A%20true%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Rust%20can%20infer%20types%20for%20generics%20too!%0A%20%20%20%20let%20float_bag%20%3D%20BagOfHolding%20%7B%20item%3A%203.14%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Note%3A%20never%20put%20a%20bag%20of%20holding%20in%20a%20bag%20of%20holding%20in%20real%20life%0A%20%20%20%20let%20bag_in_bag%20%3D%20BagOfHolding%20%7B%0A%20%20%20%20%20%20%20%20item%3A%20BagOfHolding%20%7B%20item%3A%20%22boom!%22%20%7D%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20i32_bag.item%2C%20bool_bag.item%2C%20float_bag.item%2C%20bag_in_bag.item.item%0A%20%20%20%20)%3B%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20Un%20tip%20de%20struct%20definit%20par%C8%9Bial%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20item%3A%20T%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Observa%C8%9Bi%3A%20folosind%20tipuri%20generice%2C%20gener%C4%83m%20tipuri%20create%20la%20momentul%20compil%C4%83rii%0A%20%20%20%20%2F%2F%20Turbofish%20ne%20las%C4%83%20s%C4%83%20fim%20explici%C8%9Bi%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%2042%20%7D%3B%0A%20%20%20%20let%20bool_bag%20%3D%20BagOfHolding%3A%3A%3Cbool%3E%20%7B%20item%3A%20true%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Rust%20poate%20deduce%20tipuri%20%C8%99i%20pentru%20cele%20generice!%0A%20%20%20%20let%20float_bag%20%3D%20BagOfHolding%20%7B%20item%3A%203.14%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Aten%C8%9Bie%3A%20nu%20pune%C8%9Bi%20niciodat%C4%83%20o%20geant%C4%83%20%C3%AEn%20alt%C4%83%20geant%C4%83%20%C3%AEn%20via%C8%9Ba%20real%C4%83%0A%20%20%20%20let%20bag_in_bag%20%3D%20BagOfHolding%20%7B%0A%20%20%20%20%20%20%20%20item%3A%20BagOfHolding%20%7B%20item%3A%20%22boom!%22%20%7D%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20i32_bag.item%2C%20bool_bag.item%2C%20float_bag.item%2C%20bag_in_bag.item.item%0A%20%20%20%20)%3B%0A%7D%0A - title: Reprezentarea nimicului content_markdown: > În alte limbaje, cuvântul cheie `null` este folosit pentru a reprezenta absența unei valori. El creează - dificultăți în limbajele de programare, pentru ca este posibil ca aplicația noastră + dificultăți în limbajele de programare, pentru că este posibil ca aplicația noastră să eșueze - când interacțioează cu o variabilă sau un field de acest tip. + când interacționează cu o variabilă sau un field de acest tip. Rust nu are tipul `null`, dar nu este ignorant când vine vorba de importanța reprezentării nimicului! - Gandește-te la o reprezentare naivă folosind o unealtă pe care o cunoaștem deja. + Gândiți-vă la o reprezentare naivă folosind o unealtă pe care o cunoaștem deja. Alternativa `None` (ex: match) pentru una sau @@ -48,7 +48,7 @@ des întâlnită în Rust din cauza lipsei unei valori `null`. Tipurile generice ne ajută însă să trecem de acest obstacol. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=enum%20Item%20%7B%0A%20%20%20%20Inventory(String)%2C%0A%20%20%20%20%2F%2F%20None%20represents%20the%20absence%20of%20an%20item%0A%20%20%20%20None%2C%0A%7D%0A%0Astruct%20BagOfHolding%20%7B%0A%20%20%20%20item%3A%20Item%2C%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=enum%20Item%20%7B%0A%20%20%20%20Inventory(String)%2C%0A%20%20%20%20%2F%2F%20None%20reprezint%C4%83%20absen%C8%9Ba%20unui%20element%0A%20%20%20%20None%2C%0A%7D%0A%0Astruct%20BagOfHolding%20%7B%0A%20%20%20%20item%3A%20Item%2C%0A%7D%0A - title: Option content_markdown: > Rust are un enum deja implementat numit `Option` care ne permite să reprezentăm @@ -70,7 +70,7 @@ Acest enum este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul elementelor din enum `Some` și `None`. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20A%20partially%20defined%20struct%20type%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20%2F%2F%20Our%20parameter%20type%20T%20can%20be%20handed%20to%20others%0A%20%20%20%20item%3A%20Option%3CT%3E%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Note%3A%20A%20bag%20for%20i32%2C%20holding%20nothing!%20We%20have%20to%20specify%20the%20type%0A%20%20%20%20%2F%2F%20because%20otherwise%20Rust%20would%20not%20know%20what%20type%20of%20bag%20it%20is.%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20None%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_none()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20nothing%20in%20the%20bag!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20something%20in%20the%20bag!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20Some(42)%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_some()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20something%20in%20the%20bag!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22there's%20nothing%20in%20the%20bag!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20match%20lets%20us%20deconstruct%20Option%20elegantly%20and%20ensure%20we%20handle%20all%20cases!%0A%20%20%20%20match%20i32_bag.item%20%7B%0A%20%20%20%20%20%20%20%20Some(v)%20%3D%3E%20println!(%22found%20%7B%7D%20in%20bag!%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20None%20%3D%3E%20println!(%22found%20nothing%22)%2C%0A%20%20%20%20%7D%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%2F%2F%20Un%20tip%20de%20struct%20definit%20par%C8%9Bial%0Astruct%20BagOfHolding%3CT%3E%20%7B%0A%20%20%20%20%2F%2F%20Tipul%20de%20parametru%20T%20poate%20fi%20folosit%20din%20Option%0A%20%20%20%20item%3A%20Option%3CT%3E%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Observa%C8%9Bi%3A%20O%20geant%C4%83%20pentru%20i32%2C%20care%20nu%20con%C8%9Bine%20nimic!%20Trebuie%20s%C4%83%0A%20%20%20%20%2F%2F%20specific%C4%83m%20tipul%2C%20altfel%20Rust%20nu%20va%20%C8%99ti%20ce%20tip%20poate%20%C8%9Bine%20geanta%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20None%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_none()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22nu%20este%20nimic%20%C3%AEn%20geant%C4%83!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22se%20afl%C4%83%20ceva%20%C3%AEn%20geant%C4%83!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20let%20i32_bag%20%3D%20BagOfHolding%3A%3A%3Ci32%3E%20%7B%20item%3A%20Some(42)%20%7D%3B%0A%0A%20%20%20%20if%20i32_bag.item.is_some()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22se%20afl%C4%83%20ceva%20%C3%AEn%20geant%C4%83!%22)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22nu%20este%20nimic%20%C3%AEn%20geant%C4%83!%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20match%20ne%20permite%20s%C4%83%20destructur%C4%83m%20Option%20%C3%AEn%20mod%20elegant%20pentru%0A%20%20%20%20%2F%2F%20a%20gestiona%20toate%20cazurile%20posibile!%0A%20%20%20%20match%20i32_bag.item%20%7B%0A%20%20%20%20%20%20%20%20Some(v)%20%3D%3E%20println!(%22g%C4%83sit%20%7B%7D%20%C3%AEn%20geant%C4%83!%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20None%20%3D%3E%20println!(%22nu%20a%20fost%20g%C4%83sit%20nimic%22)%2C%0A%20%20%20%20%7D%0A%7D%0A - title: Result content_markdown: > Rust are un enum deja implementat numit `Result` care ne permite să returnăm @@ -96,12 +96,12 @@ Acest enum este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul elementelor din enum `Ok` și `Err`. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3Ai32)%20-%3E%20Result%3Cf32%2CString%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20%2F%2F%20match%20lets%20us%20deconstruct%20Result%20elegantly%20and%20ensure%20we%20handle%20all%20cases!%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22found%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(e)%20%3D%3E%20println!(%22Error%3A%20%7B%7D%22%2Ce)%2C%0A%20%20%20%20%7D%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3Ai32)%20-%3E%20Result%3Cf32%2CString%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20nu%20este%20num%C4%83rul%20corect%22))%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20%2F%2F%20match%20ne%20permite%20s%C4%83%20destructur%C4%83m%20Result-ul%20%C3%AEntr-un%20mod%20elegant%0A%20%20%20%20%2F%2F%20ca%20s%C4%83%20gestion%C4%83m%20toate%20cazurile%20posibile%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(e)%20%3D%3E%20println!(%22Eroare%3A%20%7B%7D%22%2Ce)%2C%0A%20%20%20%20%7D%0A%7D%0A - title: Main-ul care poate eșua content_markdown: | `main` are capacitatea de a returna un `Result`! code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Main%20returns%20no%20value%2C%20but%20could%20return%20an%20error!%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22found%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(_e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20handle%20this%20error%20gracefully%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20return%20a%20new%20error%20from%20main%20that%20said%20what%20happened!%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20Err(String%3A%3Afrom(%22something%20went%20wrong%20in%20main!%22))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Notice%20we%20use%20a%20unit%20value%20inside%20a%20Result%20Ok%0A%20%20%20%20%2F%2F%20to%20represent%20everything%20is%20fine%0A%20%20%20%20Ok(())%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20este%20num%C4%83rul%20corect%22))%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20MMain%20nu%20returneaz%C4%83%20nicio%20valoare%2C%20dar%20poate%20returna%20o%20eroare!%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(_e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20gestioneaz%C4%83%20aceast%C4%83%20eroare%20gra%C8%9Bios%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20returneaza%20o%20nou%C4%83%20eroare%20din%20main%20care%20explic%C4%83%20ce%20s-a%20%C3%AEntamplat!%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20Err(String%3A%3Afrom(%22ceva%20nu%20a%20mers%20bine%20%C3%AEn%20main!%22))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Observa%C8%9Bi%20c%C4%83%20folosim%20o%20unitate%20%C3%AEn%20interiorul%20unui%20Result%20Ok%0A%20%20%20%20%2F%2F%20ca%20s%C4%83%20transmitem%20faptul%20c%C4%83%20totul%20a%20mers%20bine%0A%20%20%20%20Ok(())%0A%7D%0A - title: Gestionare grațioasă a erorilor content_markdown: > `Result` e atât de des întâlnit încât Rust are un operator important, `?`, pentru a le @@ -124,18 +124,18 @@ ``` code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20Look%20at%20how%20much%20code%20we%20saved!%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42)%3F%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20Ok(())%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20nu%20este%20num%C4%83rul%20corect%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20Uita%C8%9Bi%20c%C3%A2t%20spa%C8%9Biu%20am%20salvat%20prin%20aceast%C4%83%20metod%C4%83%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42)%3F%3B%0A%20%20%20%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20Ok(())%0A%7D%0A - title: Gestionarea dizgrațioasă a Option/Result content_markdown: > Folosirea `Option`/`Result` poate fi obositoare când încerci doar să scrii rapid niște cod. Și `Option`, și `Result` are o - funcție numită `unwrap` care poate fi utilă pentru a primi o valoare rapid - și murdar. `unwrap` va: + funcție numită `unwrap` care poate fi utilă pentru a primi o valoare rapid, + dar în mod periculos. `unwrap` va fi: - 1. lua valoare din Option/Result + 1. valoare din Option/Result - 2. dacă enum-ul este de tip None/Err, `panic!` + 2. `panic!`, dacă enum-ul este de tip None/Err Următoarele bucăți de cod sunt echivalente: @@ -152,7 +152,7 @@ match my_option { Some(v) => v, - None => panic!("some error message generated by Rust!"), + None => panic!("un mesaj de eroare generat de Rust!"), } ``` @@ -172,15 +172,15 @@ match my_result { Ok(v) => v, - Err(e) => panic!("some error message generated by Rust!"), + Err(e) => panic!("un mesaj de eroare generat de Rust!"), } ``` - Fii un bun rustaceu și folosește-te de `match` când poți face asta! + Fiți un bun rustaceu și folosiți-vă de `match` când puteți face asta! code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22this%20is%20not%20the%20right%20number%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20concise%20but%20assumptive%20and%20gets%20ugly%20fast%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42).unwrap()%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20this%20will%20panic!%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(1).unwrap()%3B%0A%20%20%20%20println!(%22found%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20Ok(())%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20nu%20este%20num%C4%83rul%20corect%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20concis%2C%20dar%20este%20o%20presupunere%20%C8%99i%20poate%20fi%20periculos%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42).unwrap()%3B%0A%20%20%20%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20aceasta%20va%20returna%20panic!%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(1).unwrap()%3B%0A%20%20%20%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20%0A%20%20%20%20Ok(())%0A%7D%0A - title: Vectori content_markdown: > Unele din cele mai utile tipuri generice sunt colecțiile. Un vector este o @@ -194,7 +194,7 @@ `Vec` are metoda `iter()` care creează un iterator dintr-un vector, - astfel fiind foarte ușor să + fiind astfel foarte ușor să punem un vector în interiorul unei bucle `for`. @@ -208,16 +208,16 @@ poate conține, acesta realocă elementele sale pe heap pentru a avea o nouă listă cu capacitate fixă mai mare. code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20We%20can%20be%20explicit%20with%20type%0A%20%20%20%20let%20mut%20i32_vec%20%3D%20Vec%3A%3A%3Ci32%3E%3A%3Anew()%3B%20%2F%2F%20turbofish%20%3C3%0A%20%20%20%20i32_vec.push(1)%3B%0A%20%20%20%20i32_vec.push(2)%3B%0A%20%20%20%20i32_vec.push(3)%3B%0A%0A%20%20%20%20%2F%2F%20But%20look%20how%20clever%20Rust%20is%20about%20determining%20the%20type%20automatically%0A%20%20%20%20let%20mut%20float_vec%20%3D%20Vec%3A%3Anew()%3B%0A%20%20%20%20float_vec.push(1.3)%3B%0A%20%20%20%20float_vec.push(2.3)%3B%0A%20%20%20%20float_vec.push(3.4)%3B%0A%0A%20%20%20%20%2F%2F%20That's%20a%20beautiful%20macro!%0A%20%20%20%20let%20string_vec%20%3D%20vec!%5BString%3A%3Afrom(%22Hello%22)%2C%20String%3A%3Afrom(%22World%22)%5D%3B%0A%0A%20%20%20%20for%20word%20in%20string_vec.iter()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20word)%3B%0A%20%20%20%20%7D%0A%7D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Putem%20fi%20explici%C8%9Bi%20cu%20privire%20la%20tip%0A%20%20%20%20let%20mut%20i32_vec%20%3D%20Vec%3A%3A%3Ci32%3E%3A%3Anew()%3B%20%2F%2F%20turbofish%20%3C3%0A%20%20%20%20i32_vec.push(1)%3B%0A%20%20%20%20i32_vec.push(2)%3B%0A%20%20%20%20i32_vec.push(3)%3B%0A%0A%20%20%20%20%2F%2F%20Rust%20este%20foarte%20inteligent%20c%C3%A2nd%20vine%20vorba%20de%20determinarea%20automat%C4%83%20a%20tipului%0A%20%20%20%20let%20mut%20float_vec%20%3D%20Vec%3A%3Anew()%3B%0A%20%20%20%20float_vec.push(1.3)%3B%0A%20%20%20%20float_vec.push(2.3)%3B%0A%20%20%20%20float_vec.push(3.4)%3B%0A%0A%20%20%20%20%2F%2F%20Este%20un%20macro%20superb!%0A%20%20%20%20let%20string_vec%20%3D%20vec!%5BString%3A%3Afrom(%22Hello%22)%2C%20String%3A%3Afrom(%22World%22)%5D%3B%0A%0A%20%20%20%20for%20word%20in%20string_vec.iter()%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20word)%3B%0A%20%20%20%20%7D%0A%7D%0A - title: Capitolul 4 - Incheiere content_markdown: > - Într-un singur capitol, am învățat câtă putere ne oferă tipurile generice! Nu te - îngrijora dacă nu + Într-un singur capitol, am învățat câtă putere ne oferă tipurile generice! Nu vă + îngrijorați dacă nu - știi încă pe deplin cum să folosești tot ce ai văzut în acest capitol, deocamdată este bine doar să fii conștient + știți încă pe deplin cum să folosiți tot ce ați văzut în acest capitol, deocamdată este bine doar să fiți conștient de aceste concepte majore pe care - le vei vedea des în cod. Funcțiile noastre devin destul de lungi! În următorul + le veți vedea des în cod. Funcțiile noastre devin destul de lungi! În următorul capitol vom vorbi despre un alt concept important în Rust: proprietatea datelor (data ownership). From 0ab3abf8791be4efae2d69765b3d47886b189c26 Mon Sep 17 00:00:00 2001 From: RaresCon Date: Sat, 21 Jan 2023 00:22:33 +0200 Subject: [PATCH 6/6] Translated some terms and expressions again. --- lessons/ro/chapter_1.yaml | 6 ++--- lessons/ro/chapter_2.yaml | 12 ++++----- lessons/ro/chapter_3.yaml | 52 +++++++++++++++++++-------------------- lessons/ro/chapter_4.yaml | 14 +++++------ 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/lessons/ro/chapter_1.yaml b/lessons/ro/chapter_1.yaml index 4de1d2c5c..5039d8d9b 100644 --- a/lessons/ro/chapter_1.yaml +++ b/lessons/ro/chapter_1.yaml @@ -1,7 +1,7 @@ - title: Capitolul 1 - The Basics content_markdown: > În acest prim capitol vom explora ideile și conceptele de bază despre - funcții, variabile și cele mai primitive tipuri de date. Ne bucurăm că + funcții, variabile și tipurile primitive de date. Ne bucurăm că ne sunteți alături! @@ -52,10 +52,10 @@ fac parte din două categorii: - * **mutable** (mutabile) - compilatorul va lăsa utilizatorul să modifice șî + * **mutabile** (mutable) - compilatorul va lăsa utilizatorul să modifice șî să citească valoarea acestui tip de variabile. - * **immutable** (imutabile) - compilatorul va lăsa utilizatorul doar să citească valoarea acestei variabile. + * **imutabile** (immutable) - compilatorul va lăsa utilizatorul doar să citească valoarea acestei variabile. Valorile mutabile sunt declarate cu ajutorul cuvântului cheie **mut**. diff --git a/lessons/ro/chapter_2.yaml b/lessons/ro/chapter_2.yaml index f8e87dfd3..6eae29489 100644 --- a/lessons/ro/chapter_2.yaml +++ b/lessons/ro/chapter_2.yaml @@ -1,6 +1,6 @@ - title: Capitolul 2 - Controlul Basic al Flow-ului content_markdown: > - În acest capitol vom vorbi despre metodele de control basic al flow-ului în Rust. + În acest capitol vom vorbi despre metodele de control de bază ale fluxului în Rust. Dacă sunteți familiar cu limbaje bazate pe C, o să vă simțiți ca acasă și poate @@ -69,7 +69,7 @@ https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20for%20x%20in%200..5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20for%20x%20in%200..%3D5%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20x)%3B%0A%20%20%20%20%7D%0A%7D%0A - title: match content_markdown: > - Vă lipsește switch-ul din C? Rust are un cuvânt cheie incredibil de folositor + Vă lipsește `switch`-ul din C? Rust are un cuvânt cheie incredibil de folositor pentru îndeplinirea tuturor posibilităților unei valori și executarea unei bucăți de cod dacă o anumită @@ -77,7 +77,7 @@ posibilitate este adevărată. Hai să vedem cum merge asta pentru numere. Avem de discutat mai multe - în capitolele viitoare despre pattern matching pentru date mai complexe. Vă promit că + în capitolele viitoare despre potrivirea șabloanelor (*pattern matching*) pentru date mai complexe. Vă promit că o să merite așteptarea. @@ -90,7 +90,7 @@ Matching combinat cu destructurarea datelor este de departe unul din - cele mai întâlnite pattern-uri pe care le veți vedea în Rust. + cele mai întâlnite șabloane de programare pe care le veți vedea în Rust. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2042%3B%0A%0A%20%20%20%20match%20x%20%7B%0A%20%20%20%20%20%20%20%200%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20zero%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20face%20un%20caz%20pentru%20mai%20multe%20valori%0A%20%20%20%20%20%20%20%201%20%7C%202%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%201%20sau%202!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20face%20un%20caz%20pentru%20o%20mul%C8%9Bime%0A%20%20%20%20%20%20%20%203..%3D9%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20un%20num%C4%83r%20%C3%AEntre%203%20%C8%99i%209%20inclusiv%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20putem%20pune%20num%C4%83rul%20care%20respect%C4%83%20cazul%20%C3%AEntr-o%20variabil%C4%83%0A%20%20%20%20%20%20%20%20matched_num%20%40%2010..%3D100%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20num%C4%83rul%20%7B%7D%20%C3%AEntre%2010%20%C8%99i%20100!%22%2C%20matched_num)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20acesta%20este%20cazul%20default%20care%20trebuie%20s%C4%83%20existe%20dac%C4%83%0A%20%20%20%20%20%20%20%20%2F%2F%20nu%20sunt%20abordate%20toate%20cazurile%20posibile%0A%20%20%20%20%20%20%20%20_%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22am%20g%C4%83sit%20alt%20num%C4%83r!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A - title: Returnarea unor valori dintr-o bucla @@ -100,11 +100,11 @@ https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20x%20%3D%200%3B%0A%20%20%20%20let%20v%20%3D%20loop%20%7B%0A%20%20%20%20%20%20%20%20x%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20if%20x%20%3D%3D%2013%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%20%22am%20g%C4%83sit%2013%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22din%20bucl%C4%83%3A%20%7B%7D%22%2C%20v)%3B%0A%7D%0A - title: Returnarea unor valori din expresii bloc content_markdown: > - `if`-urile, `match`-urile, funcțiile și scope block-urile au un mod unic de + `if`-urile, `match`-urile, funcțiile și domeniile bloc au un mod unic de a returna valori în Rust. - Dacă ultima instrucțiune din interiorul unui/unei `if`, `match`, funcții sau scope block este o + Dacă ultima instrucțiune din interiorul unui/unei `if`, `match`, funcții sau domeniu bloc este o expresie fără `;`, Rust o va returna sub forma unei valori din acel bloc. Acesta diff --git a/lessons/ro/chapter_3.yaml b/lessons/ro/chapter_3.yaml index 320450676..2e767df9d 100644 --- a/lessons/ro/chapter_3.yaml +++ b/lessons/ro/chapter_3.yaml @@ -1,23 +1,23 @@ - title: Capitolul 3 - Tipuri de structuri de date basic content_markdown: > Este timpul să explorăm tipuri de date dincolo de cele de bază! În acest capitol o să aruncăm o privire peste - cele mai primitive + structurile de date - structuri de date din Rust, punând accent pe reprezentarea lor în + primitive din Rust, punând accent pe reprezentarea lor în memorie. Cred c-o să vă placă cum Rust ascunde foarte puține despre cum funcționează lucrurile. - title: Structuri content_markdown: > - Un `struct` este o colecție de field-uri. + Un `struct` este o colecție de câmpuri (field-uri). - *Field*-urile sunt pe scurt date asociate unei structuri. Valorile lor + *Câmpurile* sunt pe scurt date asociate unei structuri. Valorile lor pot fi de tip primitiv sau o structură de date. Definiția structurii este ca o matriță pentru compilator pentru a ști cum să aranjeze - field-urile în memorie într-un mod compact. + câmpurile în memorie într-un mod compact. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20%2F%2F%20String%20este%20un%20struct%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D - title: Apelarea metodelor @@ -41,17 +41,17 @@ content_markdown: > Aplicațiile scrise în Rust au 3 zone de memorie unde este stocată informație: - * **data memory** - pentru date care sunt de dimensiune fixă și sunt **statice** (ex: + * **memoria pentru date** - pentru date care sunt de dimensiune fixă și sunt **statice** (ex: mereu disponibile pe toată durata rulării aplicației). Spre exemplu, textul din programul tău (ex: "Hello World!"): Memoria ocupată (bytes) de acest text este citită dintr-un singur loc în cod deci poate fi stocat în această zonă de memorie. Compilatoarele fac o groază de optimizări pentru acest tip de date și folosirea lor în general este considerată foarte rapidă, pentru că locația lor este cunoscută și fixă. - * **stack memory (stivă)** - pentru date declarate ca variabile în interiorul unei + * **memoria pentru stivă (stack)** - pentru date declarate ca variabile în interiorul unei funcții. Locația în memorie a acestor date nu se schimbă pe durata apelului funcției; datorită acestui lucru compilatoarele pot optimiza codul astfel încât datele din stivă se accesează foarte rapid. - * **heap memory (heap)** - pentru informație care este creată în timp ce aplicația + * **memoria pentru alocare dinamică (heap)** - pentru informație care este creată în timp ce aplicația rulează. Datele în această zonă de memorie pot fi adăugate, mutate, șterse, redimensionate, etc. Din cauza naturii sale dinamice, este în general considerată mai lentă, dar această zonă permite @@ -60,51 +60,51 @@ **dealocare (de memorie)**. - title: Crearea datelor în Memorie content_markdown: > - Când **instanțiem** un **struct** în codul nostru, aplicația creează - field-urile de date unul lângă altul în memorie. + Când **instanțiem** o **structură** în codul nostru, aplicația creează + câmpurile de date unul lângă altul în memorie. - Instanțiem un struct specificând toate valorile field-urilor în interiorul + Instanțiem o structură specificând toate valorile câmpurilor în interiorul `StructName { ... }`. - Field-urile unui struct sunt accesate folosind operatorul `.`. + Câmpurile unei structuri sunt accesate folosind operatorul `.`. Detalii despre memorie în exemplul nostru: * Textul din interiorul ghilimelelor este informație read-only (ex: "Ferris"), deci acesta este - pus în zona *data memory*. - * Apelul funcției `String::from` creează un struct de tip `String` care este pus + pus în zona *memoriei pentru date*. + * Apelul funcției `String::from` creează o structură de tip `String` care este pus unul - lângă altul cu field-urile struct-ului SeaCreature în *stivă*. Un String reprezintă text care poate fi modificat + lângă altul cu toate câmpurile structurii SeaCreature în *stivă*. Un String reprezintă text care poate fi modificat și face acest lucru prin intermediul următoarelor aspecte: 1. Alocă memorie pe *heap* pentru text unde va putea fi modificat - 2. Stochează o referință la acea locație de pe *heap* în struct-ul `String` + 2. Stochează o referință la acea locație de pe *heap* în structura `String` (Mai multe despre acest concept în următoarele lecții) * Așadar, cei doi prieteni ai noștri, *Ferris* și *Sarah*, sunt date care vor avea mereu valori fixe în aplicația noastră, deci vor fi puși în *stivă*. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20SeaCreature%20%7B%0A%20%20%20%20animal_type%3A%20String%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20datele%20din%20SeaCreature%20sunt%20pe%20stiv%C4%83%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Struct-ul%20String%20este%20de%20asemenea%20pe%20stiv%C4%83%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20dar%20%C8%9Bine%20o%20referin%C8%9B%C4%83%20a%20informa%C8%9Biei%20pe%20heap%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22crab%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22ghiar%C4%83%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20let%20sarah%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22caracati%C8%9B%C4%83%22)%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Sarah%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%208%2C%0A%20%20%20%20%20%20%20%20legs%3A%200%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22creier%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20este%20%7B%7D.%20Are%20%7B%7D%20m%C3%A2ini%2C%20%7B%7D%20picioare%2C%20%C8%99i%20%7B%7D%20pe%20post%20de%20arm%C4%83%22%2C%0A%20%20%20%20%20%20%20%20ferris.name%2C%20ferris.animal_type%2C%20ferris.arms%2C%20ferris.legs%2C%20ferris.weapon%0A%20%20%20%20)%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20este%20%7B%7D.%20Are%20%7B%7D%20m%C3%A2ini%2C%20%7B%7D%20picioare.%20Nu%20are%20nicio%20arm%C4%83..%22%2C%0A%20%20%20%20%20%20%20%20sarah.name%2C%20sarah.animal_type%2C%20sarah.arms%2C%20sarah.legs%0A%20%20%20%20)%3B%0A%7D%0A -- title: Struct-uri asemănătoare tuplurilor +- title: Structuri asemănătoare tuplurilor content_markdown: | - Pentru a fi conciși, puteți creea struct-uri care sunt folosite asemănător unor tupluri. + Pentru a fi conciși, puteți creea structuri care sunt folosite asemănător unor tupluri. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Location(i32%2C%20i32)%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Acesta%20este%20tot%20un%20struct%20pe%20stiv%C4%83%0A%20%20%20%20let%20loc%20%3D%20Location(42%2C%2032)%3B%0A%20%20%20%20println!(%22%7B%7D%2C%20%7B%7D%22%2C%20loc.0%2C%20loc.1)%3B%0A%7D%0A -- title: Struct-uri asemănătoare unităților +- title: Structuri asemănătoare unităților content_markdown: > - Struct-urile nu trebuie neapărat să aibă field-uri. + Structurile nu trebuie neapărat să aibă câmpuri. - După cum am menționat în Capitolul 1, o *unitate* este o altă denumire pentru un tuplu gol, `()`. - De aceea, acest tip de struct-uri se numește *Unit-like*. + După cum am menționat în Capitolul 1, *unitate* este o altă denumire pentru un tuplu gol, `()`. + De aceea, acest tip de structuri se numește *Unit-like*. - Acest tip de struct-uri este folosit rar. + Acest tip de structuri este folosit rar. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20Marker%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20_m%20%3D%20Marker%3B%0A%7D%0A - title: Enumerații @@ -113,7 +113,7 @@ mulțime de elemente prestabilite folosind cuvântul cheie `enum`. - `match` ne ajută să abordăm toate valorile posibile ale unui enum, făcând din acest tip + `match` ne ajută să abordăm toate valorile posibile ale unei enumerații, făcând din acest tip o unealtă importantă în ceea ce privește scrierea codului de calitate. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=%23!%5Ballow(dead_code)%5D%20%2F%2F%20aceast%C4%83%20linie%20opre%C8%99te%20avertiz%C4%83rile%20compilatorului%0A%0Aenum%20Species%20%7B%0A%20%20%20%20Crab%2C%0A%20%20%20%20Octopus%2C%0A%20%20%20%20Fish%2C%0A%20%20%20%20Clam%0A%7D%0A%0Astruct%20SeaCreature%20%7B%0A%20%20%20%20species%3A%20Species%2C%0A%20%20%20%20name%3A%20String%2C%0A%20%20%20%20arms%3A%20i32%2C%0A%20%20%20%20legs%3A%20i32%2C%0A%20%20%20%20weapon%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20SeaCreature%20%7B%0A%20%20%20%20%20%20%20%20species%3A%20Species%3A%3ACrab%2C%0A%20%20%20%20%20%20%20%20name%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20arms%3A%202%2C%0A%20%20%20%20%20%20%20%20legs%3A%204%2C%0A%20%20%20%20%20%20%20%20weapon%3A%20String%3A%3Afrom(%22ghiar%C4%83%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.species%20%7B%0A%20%20%20%20%20%20%20%20Species%3A%3ACrab%20%3D%3E%20println!(%22%7B%7D%20este%20crab%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AOctopus%20%3D%3E%20println!(%22%7B%7D%20este%20caracati%C8%9B%C4%83%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AFish%20%3D%3E%20println!(%22%7B%7D%20este%20pe%C8%99te%22%2Cferris.name)%2C%0A%20%20%20%20%20%20%20%20Species%3A%3AClam%20%3D%3E%20println!(%22%7B%7D%20este%20scoic%C4%83%22%2Cferris.name)%2C%0A%20%20%20%20%7D%0A%7D%0A @@ -129,11 +129,11 @@ Detalii despre memorie pentru un `enum`: - * O variabilă egalată cu o valoare provenită dintr-un enum va avea dimensiunea în memorie egală cu cea a elementului care ocupă dimensiunea maximă + * O variabilă egalată cu o valoare provenită dintr-o enumerație va avea dimensiunea în memorie egală cu cea a elementului care ocupă dimensiunea maximă Acest lucru asigură faptul că orice valoare posibilă va încăpea în aceeași dimensiune din memorie. * Pe lângă tipul de date al unui element (dacă acesta are un tip), fiecare element are de asemenea asociată - o valoare numerică care reprezintă indexul acestuia în enum. + o valoare numerică care reprezintă indexul acestuia în enumerație. Alte detalii: diff --git a/lessons/ro/chapter_4.yaml b/lessons/ro/chapter_4.yaml index 48a76b580..ee75ea961 100644 --- a/lessons/ro/chapter_4.yaml +++ b/lessons/ro/chapter_4.yaml @@ -93,7 +93,7 @@ o virgulă. - Acest enum este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul + Acest `enum` este foarte comun, instanțe ale acestui enum pot fi create oriunde prin intermediul elementelor din enum `Ok` și `Err`. code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3Ai32)%20-%3E%20Result%3Cf32%2CString%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20nu%20este%20num%C4%83rul%20corect%22))%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20result%20%3D%20do_something_that_might_fail(12)%3B%0A%0A%20%20%20%20%2F%2F%20match%20ne%20permite%20s%C4%83%20destructur%C4%83m%20Result-ul%20%C3%AEntr-un%20mod%20elegant%0A%20%20%20%20%2F%2F%20ca%20s%C4%83%20gestion%C4%83m%20toate%20cazurile%20posibile%0A%20%20%20%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20Ok(v)%20%3D%3E%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%2C%0A%20%20%20%20%20%20%20%20Err(e)%20%3D%3E%20println!(%22Eroare%3A%20%7B%7D%22%2Ce)%2C%0A%20%20%20%20%7D%0A%7D%0A @@ -125,17 +125,17 @@ ``` code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20do_something_that_might_fail(i%3A%20i32)%20-%3E%20Result%3Cf32%2C%20String%3E%20%7B%0A%20%20%20%20if%20i%20%3D%3D%2042%20%7B%0A%20%20%20%20%20%20%20%20Ok(13.0)%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20Err(String%3A%3Afrom(%22acesta%20nu%20este%20num%C4%83rul%20corect%22))%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20-%3E%20Result%3C()%2C%20String%3E%20%7B%0A%20%20%20%20%2F%2F%20Uita%C8%9Bi%20c%C3%A2t%20spa%C8%9Biu%20am%20salvat%20prin%20aceast%C4%83%20metod%C4%83%0A%20%20%20%20let%20v%20%3D%20do_something_that_might_fail(42)%3F%3B%0A%20%20%20%20println!(%22g%C4%83sit%20%7B%7D%22%2C%20v)%3B%0A%20%20%20%20Ok(())%0A%7D%0A -- title: Gestionarea dizgrațioasă a Option/Result +- title: Gestionarea inadecvată a `Option` / `Result` content_markdown: > - Folosirea `Option`/`Result` poate fi obositoare când încerci doar să + Folosirea `Option` / `Result` poate fi obositoare când încerci doar să scrii rapid niște cod. Și `Option`, și `Result` are o funcție numită `unwrap` care poate fi utilă pentru a primi o valoare rapid, dar în mod periculos. `unwrap` va fi: - 1. valoare din Option/Result + 1. valoare din `Option` / `Result` - 2. `panic!`, dacă enum-ul este de tip None/Err + 2. `panic!`, dacă enum-ul este de tip `None` / `Err` Următoarele bucăți de cod sunt echivalente: @@ -186,7 +186,7 @@ Unele din cele mai utile tipuri generice sunt colecțiile. Un vector este o listă de dimensiune variabilă de elemente - reprezentate de struct-ul `Vec`. + reprezentate de structura `Vec`. Macro-ul `vec!` ne permite să creem ușor un vector mai degrabă decât @@ -204,7 +204,7 @@ * `Vec` este un struct, dar intern el conține o referință la o listă cu capacitate fixă ale elementelor sale pe heap - * Un vector începe cu o capacitate default; când sunt adăugate mai multe elemente decât poate + * Un vector începe cu o capacitate implicită; când sunt adăugate mai multe elemente decât poate conține, acesta realocă elementele sale pe heap pentru a avea o nouă listă cu capacitate fixă mai mare. code: >-