From 45b04297ee5c32d521aad967eee0f31cca7f8692 Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Wed, 25 Jan 2023 02:02:33 +0200 Subject: [PATCH 1/6] chapter 7 romanian translation --- lessons/ro/chapter_7.yaml | 272 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 lessons/ro/chapter_7.yaml diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml new file mode 100644 index 000000000..76d7f55f5 --- /dev/null +++ b/lessons/ro/chapter_7.yaml @@ -0,0 +1,272 @@ +- title: Capitolul 7 - Programare Orientata pe Obiecte + content_markdown: > + Exprimarea ideilor cu ajutorul functiilor este o metoda dovedita de a reprezenta + comportamente si date (Limbajul C o face de decenii!). + + Din punct de vedere istoric, stiinta calculatoarelor a gasit alte agregatii si abstractii + expresive folositoare pentru date. + + Ati putea fi familiarizati cu programarea orientata pe obiecte (POO) ca fiind + una dintre acestea. In acest capitol vom explora limbajul Rust dincolo de functii. +- title: Ce este POO? + content_markdown: > + Programarea orientata pe obiecte se refera, in linii mari, la limbajele de programare ce + prezinta anumite caracteristici reprezentative: + + * Incapsularea - Asocierea datelor si functiilor intr-o unitate conceptuala de un singur tip + numita *obiect*. + + * Abstractizarea - Ascunderea datelor si functiilor pentru a acoperi detaliile + implementarii unui obiect + + * Polimorfismul - Abilitatea de a interactiona cu obiecte de tipuri diferite prin intermediul unei interfete. + + * Mostenirea - Abilitatea de a mosteni date si comportamente de la alte obiecte. +- title: Rust Nu Este POO + content_markdown: > + Rust nu dispune de o metoda semnificativa de mostenire a datelor si comportamentelor. + + * Structurile nu pot mosteni campuri de la o structura parinte. + + * Structurile nu pot mosteni functii de la o structura parinte. + + Acestea fiind spuse, Rust implementeaza o multime de caracteristici ale unui limbaj de programare, + deci probabail nu va vor deranja aceste lipsuri. +- title: Incapsulare prin matode + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=cfca759d42182509a46f65236bdfbf61 + content_markdown: > + Rust suporta conceptul de *obiect* ce reprezinta o structura asociata unor functii (cunoscute si ca *metode*). + + Primul parametru al oricarei metode trebuie sa fie o referinta la instanta asociata apelului de metoda + (exemplu: `instantaObiectului.foo()`). Rust foloseste: + + * `&self` - Referinta imutabila la instanta. + + * `&mut self` - Referinta mutabila la instanta. + + Metodele sunt definite in cadrul unui bloc de implementare prin cuvantul cheie `impl`: + + ```rust + + impl StructuraMea { + ... + fn foo(&self) { + ... + } + } + + ``` +- title: Abstractie prin Expunere Selectiva + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=859b684d23c45987c00ab1ad47584193 + content_markdown: > + Rust poate ascude implementarile interioare ale obiectelor. + + In mod implicit, campurile si metodele sunt accesibile doar modulului de care apartin. + + Cuvantul cheie `pub` expune campurile si metodele structurii in afara modulului. +- title: Polimorfismul prin Trasaturi + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=93c3841112810ceb5014298d1ee12ac7 + content_markdown: > + Rust suporta polimorfismul prin trasaturi (traits). Trasaturile ne permit associerea unui set + de metode cu o structura. + + Prima data definim semnaturile metodelor unei trasaturi in: + + ``` + + trait TrasaturaMea { + fn foo(&self); + ... + } + + ``` + Cand o structura implementeaza o trasatura, este stabilit un contract ce permite interactiunea noastra + indirecta cu structura, prin tipul trasaturii (exemplu: `&dyn TrasaturaMea` ), fara a fi nevoie + sa cunoastem tipul real al structurii. + + Metodele trasaturii implementate de structura sunt definite in cadrul unui bloc de implementare: + + ```rust + + impl TrasaturaMea for StructuraMea { + fn foo(&self) { + ... + } + ... + } + + ``` +- title: Metode Implementate Trasaturilor + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e7f8bf360fc76c991ac68ce65de812c9 + content_markdown: > + Trasaturile pot avea metode implementate. + + Functiile nu au acces direct asupra campurilor interioare ale unei structuri, dar acestea pot fi + folositoare in distribuirea comportamentelor intre mai multi implementarori ai trasaturilor. +- title: Mostenirea Trasaturilor + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=dd80df8f0822ffff6e11baf008bbcbf4 + content_markdown: | + Trasaturile pot mosteni metode de la alte trasaturi. +- title: Expediere Dinamica vs Statica + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f4953ea4a3b10093cacb2bdcf7c6445a + content_markdown: > + Metodele sunt executate in doua moduri: + + * expediere statica (static dispatch)- Cand tipul instantei este cunoscut, + stim in mod direct ce functie sa apelam. + + * expediere dinamica (dynamic dispatch)- Cand tipul instantei nu este cunoscut trebuie + sa gasim o modalitate de a apela functia corecta. + + Tipurile trasaturilor `&dyn TrasaturaMea` ne dau abilitatea de a lucra cu instante ale obiectelor + in mod indirect, folosind expedierea dinamica. + + Cand expedierea dinamica este folosita, Rust va va incuraja sa puneti `dyn` inaintea trasaturii pentru + a instiinta lumea cu privire la acest lucru. + + Detalii cu privire la memorie: + + * Expedierea dinamica este putin mai lenta, din cauza urmaririi prin pointeri pentru a determina + apelul de functie real. +- title: Trait Objects + content_markdown: > + Cand pasam o instanta a unui obiect ca parametru de tipul `&dyn TrasaturaMea`, + pasam ceea ce se numeste `trait object` (obiect-trasatura) + + Acestea sunt ceea ce ne permite sa apelam in mod indirect metodele corecte ale unei instante. + + Un `trait object` este o structura ce contine un pointer al instantei noastre, alaturi de o lista + de pointeri la functii catre metodele acesteia. + + Detalii: + + * Aceasta lista de functii este cunoscuta in C++ sub denumirea de *vtable*. +- title: Manevrarea Datelor Fara Dimensiune + content_markdown: > + Trasaturile introduc o provocare interesanta cand dorim sa le stocam in interiorul altei structuri. + + Trasaturile ascund structura originala, astfel ascunzand si dimensiunea originala. Valorile fara dimensiune + sunt manevrate in doua moduri in Rust: + + * generice - Folosind tipuri parametrizate cream structuri/functii cu tipuri si dimensiuni cunoscute + + * indirectie - Punerea instantelor pe heap ne ofera un nivel de indirectie ce ne permite a nu ne ingrijora + cu privire la dimensiunea tipului real, ci doar sa stocam un pointer catre acesta. + + Mai exista si alte modalitati! +- title: Functii Generice + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec6b3ad6669b083079acb3f70a4a0719 + content_markdown: > + Genericele in Rust functioneaza mana in mana cu trasaturile. Cand descriem un tip parametrizat `T`, putem + constrange ce tipuri pot fi folosite ca argumente, + + listand trasaturile necesare pe care argumentul trebuie sa le implementeze. + + In acest exemplu, tipul `T` trebuie sa implementeze trasatura `Foo`: + + ```rust + + fn functia_mea(foo: T) + + where + T:Foo + { + ... + } + + ``` + + Folosind generice, cream functii tipizate static la momentul compilarii, ce vor avea tipuri si marimi + cunoscute, permitandu-ne sa utilizam expedierea statica si sa stocam sub forma unei valori cu dimensiune. +- title: Prescurtare a Functiilor Generice + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=388669dcf7488bedfd64fa217a4dc0e2 + content_markdown: > + Rust are o prescurtare pentru exprimarea genericelor constranse de o trasatura: + + ```rust + fn functia_mea(foo: impl Foo) { + ... + } + ``` + + Este echivalent cu a scrie: + + ```rust + fn functia_mea(foo: T) + where + T:Foo + { + ... + } + ``` +- title: Box + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f4d50e0f275d5dad3bdcd6bdf724b1aa + content_markdown: > + `Box` este o structura de date ce ne permite sa mutam date de pe stiva in heap. + + `Box` este o structura cunoscuta sub denumirea de *smart pointer*, ce contine pointerul catre + datele noastre in heap. + + Deoarece `Box` este o structura de dimensiune cunoscuta (doar tine un pointer), este adesea folosita + ca modalitate de a stoca o referinta catre ceva + + in interiorul unei structuri ce trebuie sa cunoasca dimensiunea campurilor sale. + + `Box` este atat de comun incat poate fi utilizat de oriunde: + + ```rust + + Box::new(Foo { ... }) + + ``` +- title: Structuri Generice Revizuite + content_markdown: > + Structurile generice pot de asemenea sa-si aiba tipurile parametrizate constranse de trasaturi: + + ```rust + + struct StructuraMea + + where + T: StructuraMea + { + foo: T + ... + } + + ``` + + Structurile generice isi au tipurile parametrizate in blocul lor de implementare + + ```rust + + impl StructuraMea { + ... + } + + ``` +- title: Capitolul 7 - Concluzie + content_markdown: > + Acum avem mai multe particularitati ale limbajului prin care sa ne exprimam ideile intr-un mod clar! + + Abstractiile Rust-ului pot fi simple, insa sunt suficient de puternice pentru a face lucrul cu codul o bucurie. + + In acest capitol am aruncat o privire asupra smart pointerilor prin `Box`. In urmatorul capitol vom invata + despre cum acestia ne pot ajuta in alte situatii de memorie specializate. + + Resurse: + + * [Video - Object-oriented Programming in 7 + minutes](https://www.youtube.com/watch?v=pTB0EiLXUC8) + + * [Articol - "The faster you unlearn OOP, the better for you and your + software"](https://dpc.pw/the-faster-you-unlearn-oop-the-better-for-you-and-your-software) From d9aa2bf40f31a480dee51b0de1b3e898c7747624 Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Wed, 25 Jan 2023 17:00:02 +0200 Subject: [PATCH 2/6] added diacritic letters + embedded code links --- lessons/ro/chapter_7.yaml | 202 +++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml index 76d7f55f5..dfdf73e91 100644 --- a/lessons/ro/chapter_7.yaml +++ b/lessons/ro/chapter_7.yaml @@ -1,51 +1,51 @@ -- title: Capitolul 7 - Programare Orientata pe Obiecte +- title: Capitolul 7 - Programare Orientată pe Obiecte content_markdown: > - Exprimarea ideilor cu ajutorul functiilor este o metoda dovedita de a reprezenta - comportamente si date (Limbajul C o face de decenii!). + Exprimarea ideilor cu ajutorul funcțiilor este o metodă dovedită de a reprezenta + comportamente și date (Limbajul C o face de decenii!). - Din punct de vedere istoric, stiinta calculatoarelor a gasit alte agregatii si abstractii + Din punct de vedere istoric, știință calculatoarelor a găsit alte agregatii și abstractizări expresive folositoare pentru date. - Ati putea fi familiarizati cu programarea orientata pe obiecte (POO) ca fiind - una dintre acestea. In acest capitol vom explora limbajul Rust dincolo de functii. + Ați putea fi familiarizați cu programarea orientată pe obiecte (POO) ca fiind + una dintre acestea. În acest capitol vom explora limbajul Rust dincolo de funcții. - title: Ce este POO? content_markdown: > - Programarea orientata pe obiecte se refera, in linii mari, la limbajele de programare ce - prezinta anumite caracteristici reprezentative: + Programarea orientată pe obiecte se referă, în linii mari, la limbajele de programare ce + prezintă anumite caracteristici reprezentative: - * Incapsularea - Asocierea datelor si functiilor intr-o unitate conceptuala de un singur tip - numita *obiect*. + * Încapsularea - Asocierea datelor și funcțiilor într-o unitate conceptuală de un singur tip + numită *obiect*. - * Abstractizarea - Ascunderea datelor si functiilor pentru a acoperi detaliile - implementarii unui obiect + * Abstractizarea - Ascunderea datelor și funcțiilor pentru a acoperi detaliile + implementării unui obiect - * Polimorfismul - Abilitatea de a interactiona cu obiecte de tipuri diferite prin intermediul unei interfete. + * Polimorfismul - Abilitatea de a interacționa cu obiecte de tipuri diferite prin intermediul unei interfețe. - * Mostenirea - Abilitatea de a mosteni date si comportamente de la alte obiecte. + * Moștenirea - Abilitatea de a moșteni date și comportamente de la alte obiecte. - title: Rust Nu Este POO content_markdown: > - Rust nu dispune de o metoda semnificativa de mostenire a datelor si comportamentelor. + Rust nu dispune de o metodă semnificativă de moștenire a datelor și comportamentelor. - * Structurile nu pot mosteni campuri de la o structura parinte. + * Structurile nu pot moșteni câmpuri de la o structura părinte. - * Structurile nu pot mosteni functii de la o structura parinte. + * Structurile nu pot moșteni funcții de la o structura părinte. - Acestea fiind spuse, Rust implementeaza o multime de caracteristici ale unui limbaj de programare, - deci probabail nu va vor deranja aceste lipsuri. -- title: Incapsulare prin matode + Acestea fiind spuse, Rust implementează o mulțime de caracteristici ale unui limbaj de programare, + deci probabail nu vă vor deranja aceste lipsuri. +- title: Încapsulare prin matode code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=cfca759d42182509a46f65236bdfbf61 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20creatura.luare_zgomot())%3B%0A%7D%0A content_markdown: > - Rust suporta conceptul de *obiect* ce reprezinta o structura asociata unor functii (cunoscute si ca *metode*). + Rust suportă conceptul de *obiect* ce reprezintă o structură asociată unor funcții (cunoscute și ca *metode*). - Primul parametru al oricarei metode trebuie sa fie o referinta la instanta asociata apelului de metoda - (exemplu: `instantaObiectului.foo()`). Rust foloseste: + Primul parametru al oricărei metode trebuie să fie o referință la instanța asociată apelului de metodă + (exemplu: `instantaObiectului.foo()`). Rust folosește: - * `&self` - Referinta imutabila la instanta. + * `&self` - Referință imutabilă la instanța. - * `&mut self` - Referinta mutabila la instanta. + * `&mut self` - Referință mutabilă la instanța. - Metodele sunt definite in cadrul unui bloc de implementare prin cuvantul cheie `impl`: + Metodele sunt definite în cadrul unuia sau mai multor blocuri de implementare prin cuvântul cheie `impl`: ```rust @@ -57,23 +57,23 @@ } ``` -- title: Abstractie prin Expunere Selectiva +- title: Abstracție prin Expunere Selectivă code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=859b684d23c45987c00ab1ad47584193 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_sunet(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20creatura.luare_sunet())%3B%0A%7D%0A content_markdown: > - Rust poate ascude implementarile interioare ale obiectelor. + Rust poate ascude implementările interioare ale obiectelor. - In mod implicit, campurile si metodele sunt accesibile doar modulului de care apartin. + În mod implicit, câmpurile și metodele sunt accesibile doar modulului de care aparțin. - Cuvantul cheie `pub` expune campurile si metodele structurii in afara modulului. -- title: Polimorfismul prin Trasaturi + Cuvântul cheie `pub` expune câmpurile și metodele structurii în afara modulului. +- title: Polimorfismul prin Trăsături code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=93c3841112810ceb5014298d1ee12ac7 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20creatura.fa_zgomot()%3B%0A%7D%0A content_markdown: > - Rust suporta polimorfismul prin trasaturi (traits). Trasaturile ne permit associerea unui set + Rust suportă polimorfismul prin trăsături (în engleză *traits*). Trăsăturile ne permit asocierea unui set de metode cu o structura. - Prima data definim semnaturile metodelor unei trasaturi in: + Prima dată definim semnăturile metodelor unei trăsături în: ``` @@ -83,11 +83,11 @@ } ``` - Cand o structura implementeaza o trasatura, este stabilit un contract ce permite interactiunea noastra - indirecta cu structura, prin tipul trasaturii (exemplu: `&dyn TrasaturaMea` ), fara a fi nevoie - sa cunoastem tipul real al structurii. + Când o structură implementează o trăsătură, este stabilit un contract ce permite interacțiunea noastră + indirectă cu structura, prin tipul trăsăturii (exemplu: `&dyn TrasaturaMea` ), fără a fi nevoie + să cunoaștem tipul real al structurii. - Metodele trasaturii implementate de structura sunt definite in cadrul unui bloc de implementare: + Metodele trăsăturii implementate de structură sunt definite în cadrul unui bloc de implementare: ```rust @@ -99,77 +99,77 @@ } ``` -- title: Metode Implementate Trasaturilor +- title: Metode Implementate Trăsăturilor code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e7f8bf360fc76c991ac68ce65de812c9 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%20%20%20%20%0A%20%20%20%20fn%20fa_mult_zgomot(%26self)%7B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20creatura.fa_mult_zgomot()%3B%0A%7D%0A content_markdown: > - Trasaturile pot avea metode implementate. + Trăsăturile pot avea metode implementate. - Functiile nu au acces direct asupra campurilor interioare ale unei structuri, dar acestea pot fi - folositoare in distribuirea comportamentelor intre mai multi implementarori ai trasaturilor. -- title: Mostenirea Trasaturilor + Funcțiile nu au acces direct asupra câmpurilor interioare ale unei structuri, dar acestea pot fi + folositoare în distribuirea comportamentelor între mai mulți implementarori ai trăsăturilor. +- title: Moștenirea Trăsăturilor code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=dd80df8f0822ffff6e11baf008bbcbf4 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Atrait%20FacatorDeZgomotGalagios%3A%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_mult_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomotGalagios%20for%20CreaturaMaritima%20%7B%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20creatura.fa_mult_zgomot()%3B%0A%7D%0A content_markdown: | - Trasaturile pot mosteni metode de la alte trasaturi. -- title: Expediere Dinamica vs Statica + Trăsăturile pot moșteni metode de la alte trăsături. +- title: Expediere Dinamică vs Statică code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f4953ea4a3b10093cacb2bdcf7c6445a + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20static_fa_zgomot(creatura%3A%20%26CreaturaMaritima)%20%7B%0A%20%20%20%20%2F%2F%20cunoastem%20tipul%20real%0A%20%20%20%20creatura.fa_zgomot()%3B%0A%7D%0A%0Afn%20dinamic_fa_zgomot(facator_de_zgomot%3A%20%26dyn%20FacatorDeZgomot)%20%7B%0A%20%20%20%20%2F%2F%20nu%20cunoastem%20tipul%20real content_markdown: > - Metodele sunt executate in doua moduri: + Metodele sunt executate în două moduri: - * expediere statica (static dispatch)- Cand tipul instantei este cunoscut, - stim in mod direct ce functie sa apelam. + * expediere statică (static dispatch)- Când tipul instanței este cunoscut, + știm în mod direct ce funcție să apelăm. - * expediere dinamica (dynamic dispatch)- Cand tipul instantei nu este cunoscut trebuie - sa gasim o modalitate de a apela functia corecta. + * expediere dinamică (dynamic dispatch)- Când tipul instanței nu este cunoscut trebuie + să găsim o modalitate de a apela funcția corectă. - Tipurile trasaturilor `&dyn TrasaturaMea` ne dau abilitatea de a lucra cu instante ale obiectelor - in mod indirect, folosind expedierea dinamica. + Tipurile trăsăturilor `&dyn TrasaturaMea` ne dau abilitatea de a lucra cu instanțe ale obiectelor + în mod indirect, folosind expedierea dinamică. - Cand expedierea dinamica este folosita, Rust va va incuraja sa puneti `dyn` inaintea trasaturii pentru - a instiinta lumea cu privire la acest lucru. + Când expedierea dinamică este folosită, Rust va va încuraja să puneți `dyn` înaintea trăsăturii pentru + a înștiința lumea cu privire la acest lucru. Detalii cu privire la memorie: - * Expedierea dinamica este putin mai lenta, din cauza urmaririi prin pointeri pentru a determina - apelul de functie real. + * Expedierea dinamică este puțîn mai lentă, din cauza urmăririi prin pointeri pentru a determina + apelul de funcție real. - title: Trait Objects content_markdown: > - Cand pasam o instanta a unui obiect ca parametru de tipul `&dyn TrasaturaMea`, - pasam ceea ce se numeste `trait object` (obiect-trasatura) + Când pasăm o instanța a unui obiect ca parametru de tipul `&dyn TrasaturaMea`, + pasăm ceea ce se numește obiect al trăsăturii (în engleză `trait object`). - Acestea sunt ceea ce ne permite sa apelam in mod indirect metodele corecte ale unei instante. + Acestea sunt ceea ce ne permite să apelăm în mod indirect metodele corecte ale unei instanțe. - Un `trait object` este o structura ce contine un pointer al instantei noastre, alaturi de o lista - de pointeri la functii catre metodele acesteia. + Un obiect al trăsăturii este o structura ce conține un pointer al instanței noastre, alături de o lista + de pointeri la funcții către metodele acesteia. Detalii: - * Aceasta lista de functii este cunoscuta in C++ sub denumirea de *vtable*. -- title: Manevrarea Datelor Fara Dimensiune + * Această lista de funcții este cunoscută în C++ sub denumirea de *vtable*. +- title: Manevrarea Datelor Fără Dimensiune content_markdown: > - Trasaturile introduc o provocare interesanta cand dorim sa le stocam in interiorul altei structuri. + Trăsăturile introduc o provocare interesantă când dorim să le stocăm în interiorul altei structuri. - Trasaturile ascund structura originala, astfel ascunzand si dimensiunea originala. Valorile fara dimensiune - sunt manevrate in doua moduri in Rust: + Trăsăturile ascund structura originală, astfel ascunzând și dimensiunea originală. Valorile fără dimensiune + sunt manevrate în două moduri în Rust: - * generice - Folosind tipuri parametrizate cream structuri/functii cu tipuri si dimensiuni cunoscute + * tipuri generice - Folosind tipuri parametrizate creăm structuri/funcții cu tipuri și dimensiuni cunoscute - * indirectie - Punerea instantelor pe heap ne ofera un nivel de indirectie ce ne permite a nu ne ingrijora - cu privire la dimensiunea tipului real, ci doar sa stocam un pointer catre acesta. + * indirectie - Punerea instanțelor pe heap ne oferă un nivel de indirectie ce ne permite a nu ne îngrijora + cu privire la dimensiunea tipului real, ci doar să stocăm un pointer către acesta. - Mai exista si alte modalitati! -- title: Functii Generice + Mai există și alte modalități! +- title: Funcții Generice code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec6b3ad6669b083079acb3f70a4a0719 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20generic_fa_zgomot%3CT%3E(creatura%3A%20%26T)%0Awhere%0A%20%20%20%20T%3A%20FacatorDeZgomot%2C%0A%7B%0A%20%20%20%20%2F%2F%20cunoastem%20tipul%20real%20in%20momentul%20compilarii%0A%20%20%20%20creatura.fa_zgomot()%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20generic_fa_zgomot(%26creatura)%3B%0A%7D%0A content_markdown: > - Genericele in Rust functioneaza mana in mana cu trasaturile. Cand descriem un tip parametrizat `T`, putem - constrange ce tipuri pot fi folosite ca argumente, + Tipurile generice în Rust funcționează mâna în mâna cu trăsăturile. Când descriem un tip parametrizat `T`, putem + constrânge ce tipuri pot fi folosite ca argumente, - listand trasaturile necesare pe care argumentul trebuie sa le implementeze. + listând trăsăturile necesare (în engleză `trait bound`) pe care argumentul trebuie să le implementeze. - In acest exemplu, tipul `T` trebuie sa implementeze trasatura `Foo`: + În acest exemplu, tipul `T` trebuie să implementeze trăsătură `Foo`: ```rust @@ -183,13 +183,13 @@ ``` - Folosind generice, cream functii tipizate static la momentul compilarii, ce vor avea tipuri si marimi - cunoscute, permitandu-ne sa utilizam expedierea statica si sa stocam sub forma unei valori cu dimensiune. -- title: Prescurtare a Functiilor Generice + Folosind tipurile generice, creăm funcții tipizate static la momentul compilării, ce vor avea tipuri și mărimi + cunoscute, permițându-ne să utilizăm expedierea statică și să stocăm sub forma unei valori cu dimensiune. +- title: Prescurtare a Funcțiilor Generice code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=388669dcf7488bedfd64fa217a4dc0e2 + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20generic_fa_zgomot(creatura%3A%20%26impl%20FacatorDeZgomot)%0A%7B%0A%20%20%20%20%2F%2F%20cunoastem%20tipul%20real%20in%20momentul%20compilarii%0A%20%20%20%20creatura.fa_zgomot()%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20generic_fa_zgomot(%26creatura)%3B%0A%7D%0A content_markdown: > - Rust are o prescurtare pentru exprimarea genericelor constranse de o trasatura: + Rust are o prescurtare pentru exprimarea tipurilor generice constrânse de o trăsătură: ```rust fn functia_mea(foo: impl Foo) { @@ -209,19 +209,19 @@ ``` - title: Box code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f4d50e0f275d5dad3bdcd6bdf724b1aa + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Astruct%20Ocean%20%7B%0A%20%20%20%20animale%3A%20Vec%3CBox%3Cdyn%20FacatorDeZgomot%3E%3E%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20let%20sarah%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Sarah%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22swish%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20let%20ocean%20%3D%20Ocean%20%7B%0A%20%20%20%20%20%20%20%20animale%3A%20vec!%5BBox%3A%3Anew(ferris)%2C%20Box%3A%3Anew(sarah)%5D%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20for%20a%20in%20ocean.animale.iter()%20%7B%0A%20%20%20%20%20%20%20%20a.fa_zgomot()%3B%0A%20%20%20%20%7D%0A%7D%0A content_markdown: > - `Box` este o structura de date ce ne permite sa mutam date de pe stiva in heap. + `Box` este o structura de date ce ne permite să mutăm date de pe stivă în heap. - `Box` este o structura cunoscuta sub denumirea de *smart pointer*, ce contine pointerul catre - datele noastre in heap. + `Box` este o structura cunoscută sub denumirea de *smart pointer*, ce conține pointerul către + datele noastre în heap. - Deoarece `Box` este o structura de dimensiune cunoscuta (doar tine un pointer), este adesea folosita - ca modalitate de a stoca o referinta catre ceva + Deoarece `Box` este o structură de dimensiune cunoscută (doar ține un pointer), este adesea folosită + ca modalitate de a stoca o referință către ceva - in interiorul unei structuri ce trebuie sa cunoasca dimensiunea campurilor sale. + în interiorul unei structuri ce trebuie să cunoască dimensiunea câmpurilor sale. - `Box` este atat de comun incat poate fi utilizat de oriunde: + `Box` este atât de comun încât poate fi utilizat de oriunde: ```rust @@ -230,7 +230,7 @@ ``` - title: Structuri Generice Revizuite content_markdown: > - Structurile generice pot de asemenea sa-si aiba tipurile parametrizate constranse de trasaturi: + Structurile generice pot de asemenea să-și aibă tipurile parametrizate constrânse de trăsături: ```rust @@ -245,7 +245,7 @@ ``` - Structurile generice isi au tipurile parametrizate in blocul lor de implementare + Structurile generice își au tipurile parametrizate în blocul lor de implementare ```rust @@ -256,12 +256,12 @@ ``` - title: Capitolul 7 - Concluzie content_markdown: > - Acum avem mai multe particularitati ale limbajului prin care sa ne exprimam ideile intr-un mod clar! + Acum avem mai multe particularități ale limbajului prin care să ne exprimăm ideile într-un mod clar! - Abstractiile Rust-ului pot fi simple, insa sunt suficient de puternice pentru a face lucrul cu codul o bucurie. + Abstractizările făcutre de limbajul pot fi simple, însă sunt suficient de puternice pentru a face lucrul cu codul o bucurie. - In acest capitol am aruncat o privire asupra smart pointerilor prin `Box`. In urmatorul capitol vom invata - despre cum acestia ne pot ajuta in alte situatii de memorie specializate. + În acest capitol am aruncat o privire asupra smart pointerilor prin `Box`. În următorul capitol vom învață + despre cum aceștia ne pot ajuta în alte situații de memorie specializate. Resurse: @@ -269,4 +269,4 @@ minutes](https://www.youtube.com/watch?v=pTB0EiLXUC8) * [Articol - "The faster you unlearn OOP, the better for you and your - software"](https://dpc.pw/the-faster-you-unlearn-oop-the-better-for-you-and-your-software) + software"](https://dpc.pw/the-faster-you-unlearn-oop-the-better-for-you-and-your-software) \ No newline at end of file From a9e40b2ebc48c000467bcabb41c51ca7d590046c Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Wed, 25 Jan 2023 17:32:12 +0200 Subject: [PATCH 3/6] specified that dyn is necessary --- lessons/ro/chapter_7.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml index dfdf73e91..2e1f58d76 100644 --- a/lessons/ro/chapter_7.yaml +++ b/lessons/ro/chapter_7.yaml @@ -127,8 +127,7 @@ Tipurile trăsăturilor `&dyn TrasaturaMea` ne dau abilitatea de a lucra cu instanțe ale obiectelor în mod indirect, folosind expedierea dinamică. - Când expedierea dinamică este folosită, Rust va va încuraja să puneți `dyn` înaintea trăsăturii pentru - a înștiința lumea cu privire la acest lucru. + Când expedierea dinamică este folosită, este necesar să puneți `dyn` înaintea trăsăturii. Detalii cu privire la memorie: @@ -269,4 +268,4 @@ minutes](https://www.youtube.com/watch?v=pTB0EiLXUC8) * [Articol - "The faster you unlearn OOP, the better for you and your - software"](https://dpc.pw/the-faster-you-unlearn-oop-the-better-for-you-and-your-software) \ No newline at end of file + software"](https://dpc.pw/the-faster-you-unlearn-oop-the-better-for-you-and-your-software) From f80de6cd1c667ccdbd7bd08e8a868cb472d5247d Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Wed, 25 Jan 2023 17:49:06 +0200 Subject: [PATCH 4/6] tried to rephrase the part about implemented methods on traits --- lessons/ro/chapter_7.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml index 2e1f58d76..81c96a73a 100644 --- a/lessons/ro/chapter_7.yaml +++ b/lessons/ro/chapter_7.yaml @@ -105,8 +105,8 @@ content_markdown: > Trăsăturile pot avea metode implementate. - Funcțiile nu au acces direct asupra câmpurilor interioare ale unei structuri, dar acestea pot fi - folositoare în distribuirea comportamentelor între mai mulți implementarori ai trăsăturilor. + Funcțiile nu au acces direct asupra câmpurilor interioare ale unei structuri, dar aceste metode implementate + trasaturilor pot fi folositoare în distribuirea comportamentelor între mai mulți implementarori ai trăsăturilor. - title: Moștenirea Trăsăturilor code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Atrait%20FacatorDeZgomotGalagios%3A%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_mult_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomotGalagios%20for%20CreaturaMaritima%20%7B%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20creatura.fa_mult_zgomot()%3B%0A%7D%0A From 698a026d42c60bb1c23b3fe09e1c0112d4da5329 Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Thu, 26 Jan 2023 18:58:12 +0200 Subject: [PATCH 5/6] rephrased some more --- lessons/ro/chapter_7.yaml | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml index 81c96a73a..2aa4c9d58 100644 --- a/lessons/ro/chapter_7.yaml +++ b/lessons/ro/chapter_7.yaml @@ -106,7 +106,7 @@ Trăsăturile pot avea metode implementate. Funcțiile nu au acces direct asupra câmpurilor interioare ale unei structuri, dar aceste metode implementate - trasaturilor pot fi folositoare în distribuirea comportamentelor între mai mulți implementarori ai trăsăturilor. + trăsăturilor pot fi folositoare în distribuirea comportamentelor între mai mulți implementarori ai trăsăturilor. - title: Moștenirea Trăsăturilor code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Atrait%20FacatorDeZgomotGalagios%3A%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_mult_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%20%20%20%20self.fa_zgomot()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aimpl%20FacatorDeZgomotGalagios%20for%20CreaturaMaritima%20%7B%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20creatura.fa_mult_zgomot()%3B%0A%7D%0A @@ -146,17 +146,19 @@ Detalii: * Această lista de funcții este cunoscută în C++ sub denumirea de *vtable*. -- title: Manevrarea Datelor Fără Dimensiune +- title: Manevrarea Tipurilor de Date Fără Dimensiune Fixă content_markdown: > Trăsăturile introduc o provocare interesantă când dorim să le stocăm în interiorul altei structuri. - Trăsăturile ascund structura originală, astfel ascunzând și dimensiunea originală. Valorile fără dimensiune - sunt manevrate în două moduri în Rust: + Trăsăturile ascund structura originală, astfel ascunzând și dimensiunea originală. Tipurile de date fără + dimensiune fixa sunt manevrate în două moduri în Rust: * tipuri generice - Folosind tipuri parametrizate creăm structuri/funcții cu tipuri și dimensiuni cunoscute - * indirectie - Punerea instanțelor pe heap ne oferă un nivel de indirectie ce ne permite a nu ne îngrijora - cu privire la dimensiunea tipului real, ci doar să stocăm un pointer către acesta. + * indirecție - Punerea instanțelor pe heap ne oferă avantajul de a nu fi necesar să cunoaștem dimensiunea + tipului de date la compilare, aceasta fiind folosita doar în momentul rulării. Accesarea valorii efective + + se realizează printr-un pointer (presupune o indirectie), iar acest lucru poate fi considerat un dezavantaj. Mai există și alte modalități! - title: Funcții Generice @@ -182,8 +184,8 @@ ``` - Folosind tipurile generice, creăm funcții tipizate static la momentul compilării, ce vor avea tipuri și mărimi - cunoscute, permițându-ne să utilizăm expedierea statică și să stocăm sub forma unei valori cu dimensiune. + Folosind tipurile generice, creăm șabloane de funcții care au tipuri de date ce vor fi înlocuite la momentul + compilării cu tipuri de date cunoscute, permițându-ne să utilizăm apelarea statică. - title: Prescurtare a Funcțiilor Generice code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=struct%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20nume%3A%20String%2C%0A%20%20%20%20zgomot%3A%20String%2C%0A%7D%0A%0Aimpl%20CreaturaMaritima%20%7B%0A%20%20%20%20pub%20fn%20luare_zgomot(%26self)%20-%3E%20%26str%20%7B%0A%20%20%20%20%20%20%20%20%26self.zgomot%0A%20%20%20%20%7D%0A%7D%0A%0Atrait%20FacatorDeZgomot%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%3B%0A%7D%0A%0Aimpl%20FacatorDeZgomot%20for%20CreaturaMaritima%20%7B%0A%20%20%20%20fn%20fa_zgomot(%26self)%20%7B%0A%20%20%20%20%20%20%20%20println!(%22%7B%7D%22%2C%20%26self.luare_zgomot())%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20generic_fa_zgomot(creatura%3A%20%26impl%20FacatorDeZgomot)%0A%7B%0A%20%20%20%20%2F%2F%20cunoastem%20tipul%20real%20in%20momentul%20compilarii%0A%20%20%20%20creatura.fa_zgomot()%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20creatura%20%3D%20CreaturaMaritima%20%7B%0A%20%20%20%20%20%20%20%20nume%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20zgomot%3A%20String%3A%3Afrom(%22blub%22)%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20generic_fa_zgomot(%26creatura)%3B%0A%7D%0A @@ -215,11 +217,11 @@ `Box` este o structura cunoscută sub denumirea de *smart pointer*, ce conține pointerul către datele noastre în heap. - Deoarece `Box` este o structură de dimensiune cunoscută (doar ține un pointer), este adesea folosită - ca modalitate de a stoca o referință către ceva - - în interiorul unei structuri ce trebuie să cunoască dimensiunea câmpurilor sale. - + Deoarece `Box` este o structură de dimensiune cunoscută (conține doar un pointer), este adesea folosit + atunci când o structură trebuie să cunoască dimensiunea câmpurilor sale. Astfel, în interiorul structurii, + + vom stoca o referință prin intermediul lui `Box`. + `Box` este atât de comun încât poate fi utilizat de oriunde: ```rust @@ -229,7 +231,7 @@ ``` - title: Structuri Generice Revizuite content_markdown: > - Structurile generice pot de asemenea să-și aibă tipurile parametrizate constrânse de trăsături: + Structurile generice pot, de asemenea, să-și aibă tipurile parametrizate constrânse de trăsături: ```rust @@ -244,7 +246,7 @@ ``` - Structurile generice își au tipurile parametrizate în blocul lor de implementare + Structurile generice își au tipurile parametrizate în blocul lor de implementare: ```rust From 66a72149fd56bd2f1741d997f47f15dbf91ad564 Mon Sep 17 00:00:00 2001 From: Anne Onciulescu Date: Fri, 27 Jan 2023 19:07:50 +0200 Subject: [PATCH 6/6] small fixes --- lessons/ro/chapter_7.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lessons/ro/chapter_7.yaml b/lessons/ro/chapter_7.yaml index 2aa4c9d58..765ce1e20 100644 --- a/lessons/ro/chapter_7.yaml +++ b/lessons/ro/chapter_7.yaml @@ -153,12 +153,16 @@ Trăsăturile ascund structura originală, astfel ascunzând și dimensiunea originală. Tipurile de date fără dimensiune fixa sunt manevrate în două moduri în Rust: - * tipuri generice - Folosind tipuri parametrizate creăm structuri/funcții cu tipuri și dimensiuni cunoscute + * tipuri generice - Folosind tipuri parametrizate creăm structuri/funcții cu tipuri de date generice, + a căror dimensiune va fi cunoscută în momentul folosirii lor, când programatorul va specifica un tip de date + + efectiv, care va avea și dimensiuni cunoscute. * indirecție - Punerea instanțelor pe heap ne oferă avantajul de a nu fi necesar să cunoaștem dimensiunea - tipului de date la compilare, aceasta fiind folosita doar în momentul rulării. Accesarea valorii efective - - se realizează printr-un pointer (presupune o indirectie), iar acest lucru poate fi considerat un dezavantaj. + tipului de date la compilare, aceasta fiind folosita doar în momentul rulării, când programatorul poate + + folosi orice tip de date care se portivește. Accesarea valorii efective se realizează printr-un pointer + (presupune o indirectie), iar acest lucru poate fi considerat un dezavantaj. Mai există și alte modalități! - title: Funcții Generice