forked from richardanaya/tour_of_rust
-
Notifications
You must be signed in to change notification settings - Fork 18
Translated Chapter 6 of the Rust tour in Romanian 🇷🇴 #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
AnneOnciulescu
wants to merge
2
commits into
UPB-CS-OpenSourceUpstream:master
Choose a base branch
from
AnneOnciulescu:ro_chapter6
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
- title: Capitolul 6 - Text | ||
content_markdown: > | ||
Acum că înțelegem puțin modul în care Rust gestionează memoria, suntem pregătiti să discutăm | ||
mai detaliat despre folosirea textelor. | ||
|
||
Limbajul Rust acorda multă importanță folosirii textelor în diverse limbi și modului în care sunt reprezentate | ||
acestea la nivel de octeți, lucruri cu care s-ar putea să nu fiți familiarizați din alte limbaje. | ||
|
||
Acestea fiind spuse, Rust dispune de numeroase unelte pentru gestionarea lor. | ||
- title: Șiruri de caractere literale | ||
content_markdown: > | ||
Șirurile de caractere literale (în engleză *string literals*) sunt întotdeauna reprezentate | ||
folosind codificarea **utf-8** al setului de caracatere Unicode. | ||
|
||
|
||
Șirurile de caractere literale sunt de tipul `&'static str`: | ||
|
||
* `&` înseamnă că referentiaza o locație din memorie, neavând `&mut` compilatorul | ||
nu va permite modificări. | ||
|
||
* `'static` înseamnă că datele șirului vor fi disponibile până la sfârșitul | ||
programului (nu se dă `drop` niciodată). | ||
|
||
* `str` înseamnă o secvență de octeți ce formează întotdeauna un text valid in formatul **utf-8** | ||
|
||
Detalii legate de memorie: | ||
|
||
* Compilatorul de Rust probabil va pune șirul de caractere în segmentul de date al | ||
memoriei programului. | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%3A%20%26'static%20str%20%3D%20%22hi%20%F0%9F%A6%80%22%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20a.len())%3B%0A%7D%0A | ||
- title: Ce este utf-8 | ||
content_markdown: "Pe măsură ce tot mai multe limbi au început a fi folosite pe calculatoare, lumea a avut nevoie de modalități de reprezentare a mai multor caractere de text\ndecat ASCII permitea (1 byte permitea numai 256 de caractere). \n\nA fost introdus **utf-8**, având o lungime variabilă de bytes (1-4 bytes), lucru ce a crescut considerabil gama de caractere posibile.\n\nUn avantaj al caracterelor de dimensiuni variabile este că textul nu mai are octeți inutili pentru caractere ASCII foarte comune (necesitând doar 1 octet în **utf-8**).\n\nUn dezavantaj al caracterelor de dimensiuni variabile este faptul că căutarea caracterelor nu se mai poate face rapid \n(** timp constant O(1)**) cu o simplă indexare (exemplu: `my_text[3]` pentru a obține al patrulea caracter). Este posibil ca\ncaracterele anterioare să aibă lățimi variabile, modificând locul în care începe de fapt al 4-lea caracter în secvența de octeți.\n\nTrebuie în schimb să parcurgem o secvență **utf-8** de octeți pentru a înțelege unde încep de fapt caracterele Unicode (** timp liniar **O(n)**).\n\nFerris: \"În mare parte, doar mă bucur că am **utf-8** pentru a reprezenta emoticoane cu prietenii mei subacvatici.\"\n\n<span class=\"emoji\">\U0001F420\U0001F419\U0001F41F\U0001F42C\U0001F40B</span>\n" | ||
- title: Secvențe Escape | ||
content_markdown: > | ||
Este o provocare să reprezinți vizual anumite caractere, așa că secvențele escape (în engleză *escape codes*) | ||
ne permit să punem un simbol în locul lor. | ||
|
||
|
||
Rust suportă codurile de escape comune ale limbajelor bazate pe C: | ||
|
||
* `\n` - newline | ||
|
||
* `\r` - carriage return | ||
|
||
* `\t` - tab | ||
|
||
* `\\\` - backslash | ||
|
||
* `\0` - nul | ||
|
||
* `\'` - ghilimele singulare | ||
|
||
|
||
Lista completă există | ||
[aici](https://doc.rust-lang.org/reference/tokens.html). | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%3A%20%26'static%20str%20%3D%20%22Ferris%20spune%3A%5Ct%5C%22salut%5C%22%22%3B%0A%20%20%20%20println!(%22%7B%7D%22%2Ca)%3B%0A%7D%0A | ||
- title: Șiruri de caractere literale pe mai multe linii | ||
content_markdown: | | ||
Șirurile de caractere din Rust sunt în mod implicit pe mai multe linii. | ||
|
||
Folosiți un `\` la sfârșitul rândului dacă nu doriți să se facă o întrerupere de rând. | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20haiku%3A%20%26'static%20str%20%3D%20%22%0A%20%20%20%20%20%20%20%20I%20write%2C%20erase%2C%20rewrite%0A%20%20%20%20%20%20%20%20Erase%20again%2C%20and%20then%0A%20%20%20%20%20%20%20%20A%20poppy%20blooms.%0A%20%20%20%20%20%20%20%20-%20Katsushika%20Hokusai%22%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20haiku)%3B%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20println!(%22salutare%20%5C%0A%20%20%20%20lume%22)%20%2F%2F%20observati%20cum%20spatierea%20de%20dinainte%20de%20%22l%22%20este%20ignorata%0A%7D%0A | ||
- title: Șiruri de caractere literale brute | ||
content_markdown: > | ||
Șiruri de caractere brute (în engleză *raw strings*) ne permit scrierea unei secvente de caractere, | ||
cuvânt cu cuvânt, începând cu `r#"` și terminând cu `"#`. Acest lucru ne permite să inserăm | ||
|
||
caractere care altfel ne-ar putea face să confundăm un șir de caractere normal cu unul literal | ||
(cum ar fi ghilimele duble și backslash-urile). | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%3A%20%26'static%20str%20%3D%20r%23%22%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22sfat%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20Sirurile%20de%20caractere%20brute%20sunt%20folositoare%20in%20unele%20situatii.%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%22%23%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20a)%3B%0A%7D%0A | ||
- title: Șiruri de caractere literale din fisiere | ||
content_markdown: > | ||
Dacă aveți un text foarte mare, luați în considerare utilizarea macroului `include_str!` pentru | ||
a include text din fișiere locale în programul dumneavoastră: | ||
|
||
|
||
```rust | ||
|
||
let salut_html = include_str!("salut.html"); | ||
|
||
``` | ||
- title: Subșiruri de caractere | ||
content_markdown: > | ||
Un subșir de caractere (în engleză *string slice*) este o referință la o secvență de octeți din memorie ce trebuie | ||
întotdeauna să fie în format utf-8 valid. | ||
|
||
Un subșir al unui subșir (în engleză *sub-slice*) de `str`, trebuie să fie, de asemenea, în format utf-8 valid. | ||
|
||
|
||
Metode comune ale `&str`: | ||
|
||
* `len` obține lungimea șirului literal în octeți (nu numărul de caractere). | ||
|
||
* `starts_with`/`ends_with` pentru teste de bază. | ||
|
||
* `is_empty` returnează *true* dacă lungimea este zero. | ||
|
||
* `find` returnează un `Option<usize>` al primei poziții dintr-un text. | ||
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%20%22salut%20%F0%9F%A6%80%22%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20a.len())%3B%0A%20%20%20%20let%20primul_cuvant%20%3D%20%26a%5B0..5%5D%3B%0A%20%20%20%20let%20al_doilea_cuvant%20%3D%20%26a%5B6..10%5D%3B%0A%20%20%20%20%2F%2F%20let%20jumatate_de_crab%20%3D%20%26a%5B6..8%5D%3B%20E%C8%98UEAZ%C4%82%0A%20%20%20%20%2F%2F%20Rust%20nu%20accepta%20subsiruri%20formate%20din%20caractere%20Unicode%20invalide%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20primul_cuvant%2C%20al_doilea_cuvant)%3B%0A%7D%0A | ||
- title: Tipul `char` | ||
content_markdown: > | ||
Cu atâtea dificultăți în lucrul cu Unicode, Rust oferă o modalitate de a | ||
prelua o secvență de octeți utf-8 ca un vector de caractere de tip `char`. | ||
|
||
|
||
Un `char` are întotdeauna o lungime de 4 octeți (ceea ce permite o căutare eficientă după caractere individuale). | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20colecteaza%20caracterele%20ca%20vector%20de%20char-uri%0A%20%20%20%20let%20chars%20%3D%20%22salut%20%F0%9F%A6%80%22.chars().collect%3A%3A%3CVec%3Cchar%3E%3E()%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20chars.len())%3B%20%2F%2F%20ar%20trebui%20sa%20fie%207%0A%20%20%20%20%2F%2F%20cum%20un%20char%20ocupa%204%20biti%2C%20putem%20converti%20la%20u32%0A%20%20%20%20println!(%22%7B%7D%22%2C%20chars%5B3%5D%20as%20u32)%3B%0A%7D%0A | ||
- title: Șiruri de caractere | ||
content_markdown: > | ||
Un șir de caractere (în engleză *string*) este o structură care deține o secvență de octeți utf-8 în memoria heap. | ||
|
||
|
||
Deoarece memoria sa se află în heap, aceasta poate fi extinsă, modificată etc. în moduri în care șirurile | ||
de caractere literale nu pot fi modificate. | ||
|
||
|
||
Metode comune: | ||
|
||
|
||
* `push_str` pentru a adăuga mai mulți octeți utf-8 la sfârșitul unui șir de caractere. | ||
|
||
* `replace` pentru a înlocui secvențe de octeți utf-8 cu altele. | ||
|
||
* `to_lowercase`/`to_uppercase` pentru a schimba între majuscule și minuscule. | ||
|
||
* `trim` pentru eliminarea spatiilor. | ||
|
||
|
||
Atunci când un șir de caractere este eliminat (drop), este eliminată și memoria heap a acestuia. | ||
|
||
|
||
Șirile de caractere au un operator `+` care extinde șirul cu un `&str`. (Șirul din stânga este `consumat`, iar buffer-ul lui | ||
este refolosit pentru a stoca valoarea finală. Șirul din dreapta este doar împrumutat pentru a efectua concatenarea.) | ||
dar s-ar putea să nu fie atât de ergonomic pe cât sperați. | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20salutarelume%20%3D%20String%3A%3Afrom(%22salutare%22)%3B%0A%20%20%20%20salutarelume.push_str(%22%20lume%22)%3B%0A%20%20%20%20salutarelume%20%3D%20salutarelume%20%2B%20%22!%22%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20salutarelume)%3B%0A%7D%0A | ||
- title: Text ca parametru de funcție | ||
content_markdown: > | ||
Șirurile de caractere (literale) sunt în general transmise către funcții sub forma unui subșir. | ||
|
||
Acest lucru oferă o mare flexibilitate în majoritatea scenariilor, cand nu este nevoie | ||
să transmiteți de fapt proprietatea (ownership). | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20spune_tare(msg%3A%26str)%7B%0A%20%20%20%20println!(%22%7B%7D!!!%22%2Cmsg.to_string().to_uppercase())%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20spune_tare%20poate%20imprumuta%20un%20%26'static%20str%20ca%20%26str%0A%20%20%20%20spune_tare(%22salut%22)%3B%0A%20%20%20%20%2F%2F%20spune_tare%20poate%2C%20de%20asemenea%2C%20imprumuta%20un%20String%20ca%20%26str%0A%20%20%20%20spune_tare(%26String%3A%3Afrom(%22la%20revedere%22))%3B%0A%7D%0A | ||
- title: Construirea șirurilor de caractere | ||
content_markdown: | | ||
`concat` și `join` sunt două moduri simple, dar eficiente de a construi șiruri de caractere. | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20salutarelume%20%3D%20%5B%22salutare%22%2C%20%22%20%22%2C%20%22lume%22%2C%20%22!%22%5D.concat()%3B%0A%20%20%20%20let%20abc%20%3D%20%5B%22a%22%2C%20%22b%22%2C%20%22c%22%5D.join(%22%2C%22)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20salutarelume)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2Cabc)%3B%0A%7D%0A | ||
- title: Formatarea șirurilor de caractere | ||
content_markdown: > | ||
Macroul `format!` ne permite să creăm un șir de caractere prin definirea unui șir parametrizat | ||
cu poziții pentru locul și modul în care trebuie plasate valorile (exemplu: `{}`). | ||
|
||
|
||
`format!` utilizează aceleași șiruri parametrizate ca și `println!`. | ||
|
||
|
||
Capabilitățile acestei funcții sunt de o amploare prea mare pentru *Turul limbajului Rust*; | ||
consultați documentația [aici](https://doc.rust-lang.org/std/fmt/). | ||
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%2042%3B%0A%20%20%20%20let%20f%20%3D%20format!(%22secretul%20vietii%3A%20%7B%7D%22%2Ca)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2Cf)%3B%0A%7D%0A | ||
- title: Convertirea șirurilor de caractere | ||
content_markdown: | | ||
Multe tipuri pot fi convertite într-un șir de caractere folosind `to_string`. | ||
|
||
Funcția generică `parse` poate fi utilizată pentru a converti șiruri de caractere (literale) | ||
într-o valoare tipizată. Această funcție returnează un `Result` deoarece ar putea eșua. | ||
code: >- | ||
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20-%3E%20Result%3C()%2C%20std%3A%3Anum%3A%3AParseIntError%3E%20%7B%0A%20%20%20%20let%20a%20%3D%2042%3B%0A%20%20%20%20let%20a_string%20%3D%20a.to_string()%3B%0A%20%20%20%20let%20b%20%3D%20a_string.parse%3A%3A%3Ci32%3E()%3F%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20b)%3B%0A%20%20%20%20Ok(())%0A%7D%0A | ||
- title: Capitolul 6 - Concluzie | ||
content_markdown: > | ||
Acum cunoașteți elementele de bază ale textului! După cum ați văzut, Unicode face lucrul | ||
cu textul puțin mai complicat, dar biblioteca standard | ||
|
||
are o mulțime de funcționalități care facilitează gestionarea acestuia. | ||
|
||
|
||
Până acum, am privit limbajul Rust în mare parte prin prisma unei paradigme procedurale | ||
(adică doar funcții și date), | ||
|
||
dar este momentul să vorbim acum despre trăsături și despre capacitățile dezvăluite de | ||
paradigma orientată pe obiecte a limbajului Rust. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.