diff --git a/lessons/al/chapter_0.yaml b/lessons/al/chapter_0.yaml new file mode 100644 index 000000000..b610195c6 --- /dev/null +++ b/lessons/al/chapter_0.yaml @@ -0,0 +1,39 @@ +- title: >- + Hello World! + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20println!(%22Ckemi!%2C%20%F0%9F%A6%80%22)%3B%0A%7D%0A + content_markdown: | + Welcome to the Tour of Rust + + **Happy 3 Year Anniversary 🎉** + + Welcome to the *Tour of Rust*. This is meant to be a step by step guide through the features of the Rust programming language. Rust is often considered a language with a steep learning curve, but I hope I can convince you there's a lot to explore before we even get to complex parts. + + You can also find this guide in these languages: + + * [Deutsch](00_de.html) + * [Español](00_es.html) + * [Français](00_fr.html) + * [Interlingue](00_ie.html) + * [Magyar](00_hu.html) + * [Polski](00_pl.html) + * [Português Brasileiro](00_pt-br.html) + * [Română](00_ro.html) + * [Русский](00_ru.html) + * [简体中文](00_zh-cn.html) + * [繁體中文](00_zh-tw.html) + * [日本語](00_ja.html) + * [한국어](00_ko.html) + * [Türkçe](00_tr.html) + * [Ελληνικά](00_gr.html) + * [Українська](00_ua.html) + * [ภาษาไทย](00_th.html) + * [Italian](00_it.html) + * [Tiếng Việt](00_vi.html) + * [العربية](00_ar.html) + + If you have suggestions on content or would like to contribute to translations, check out Tour of Rust's [github repository](https://github.com/richardanaya/tour_of_rust). + + You can navigate through the tour with keyboard ⬅️ and ➡️. + + In this classic example we show Rust's support for Unicode strings. diff --git a/lessons/al/chapter_1.yaml b/lessons/al/chapter_1.yaml new file mode 100644 index 000000000..b41fbd284 --- /dev/null +++ b/lessons/al/chapter_1.yaml @@ -0,0 +1,233 @@ +- title: Kapitulli 1 - Bazat + content_markdown: > + Në këtë kapitull të parë ne do të eksplorojmë bazat + me funksionet, variablat dhe llojet më primitive. Gëzohemi që ju kemi + ne bord! + + + Gjithashtu! Në rast se po pyesni kush eshte kjo gaforre e adhurueshme qe + po te flet, unë jam **Ferris**, + maskota jozyrtare për gjuhën e programimit Rust. Gëzohem që u njohëm. + + + Pasi të njiheni me Rust, mund ta quani veten **Rustacean**. Kjo është + si e quajnë veten njerëzit që përdorin, kontribuojnë ose janë të interesuar për Rust. +- title: Sheshi i Lojërave Rust + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 +content_markdown: > + Ky tur përdor një mjet kodimi ndërveprues nga [Rust + Playground](https://play.rust-lang.org). + + + Është një mënyrë e shkëlqyer për të luajtur me Rust dhe për t'u treguar të tjerëve kreativitetin tuaj + dhe te maresh pjese ne sfida! +- title: Variablat + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Variablat deklarohen duke përdorur fjalën kyçe **let**. + + + Kur caktoni një vlerë, Rust do të jetë në gjendje të konkludojë llojin e variabiles tuaj + 99% te rasteve. + + Nëse nuk mundet, mund të shtoni llojin në deklaratën tuaj të variabiles. + + + Vini re se si mund t'i caktojmë të njëjtit emër variabël shumë herë. Kjo është + quhet variabël + + hijezimi dhe lloji mund të ndryshohet për referenca të mëvonshme për këtë + emer. + + + Emrat e variabilave jane sa here ne `snake_case`. +- title: Ndryshimi i variabilava + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Rust kujdeset shumë për variablat që mund të modifikohen. vlerat + + ndahen në dy lloje: + + + * **mutable/e ndryshueshme** - kompajleri do të lejojë që variabila të shkruhet dhe + te lexohet. + + * **immutable/e pa nryshueshme** - kompajleri do të lejojë vetëm leximin e ndryshores + + + Vlerat e ndryshueshme shënohen me një fjalë kyçe **mut**. + + + Ne do të kemi më shumë për të thënë më vonë për këtë koncept, por tani për tani vetëm mbani një sy + jashtë për këtë fjalë kyçe. +- title: Tipet Bazike + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + + content_markdown: > + Rust ka një sërë llojesh të njohura: + + + * booleans - `bool` për paraqitjen e vërtetë/false + + * numra të plotë të panënshkruar - `u8` `u16` `u32` `u64` `u128` për përfaqësim + numra të plotë jonegativë + + * numra të plotë të nënshkruar - `i8` `i16` `i32` `i64` `i128` për përfaqësimin e numrave të plotë + + * Numrat e plotë të madhësisë së treguesit - `usize` `isize` për paraqitjen e indekseve + + dhe madhësive të gjërave në kujtesë + + * pikë lundruese - `f32` `f64` + + * karaktere - `char` për përfaqësimin e një karakteri të vetëm Unicode + + * tuple - `(vlera, vlera, ...)` për kalimin e sekuencave fikse të vlerave në + rafte + + * vargje - `[vlera, vlera, ...]` një koleksion elementësh të ngjashëm me fikse + gjatësia e njohur në kohën e përpilimit + + * slices - një koleksion elementësh të ngjashëm me gjatësi të njohur në kohën e ekzekutimit + + * `str` (prerja e vargut) - tekst me një gjatësi të njohur në kohën e ekzekutimit + + + Teksti mund të jetë më kompleks se sa jeni mësuar në gjuhë të tjera; + + meqenëse Rust është një gjuhë programimi e sistemit, ajo kujdeset për kujtesën + + çështje me të cilat mund të mos jeni mësuar. Ne do të hyjmë në këtë në detaje më vonë. + + + Llojet numerike mund të specifikohen në mënyrë eksplicite duke i bashkangjitur tipit në fund + të numrit (p.sh. "13u32", "2u8"). +- title: Konvertimi i tipit bazë + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Ndryshku kërkon qartësi kur bëhet fjalë për llojet numerike. Një nuk mund + + përdorni një `u8` për një `u32` rastësisht pa + + gabim. + + + Fatmirësisht Rust i bën konvertimet e tipit numerik shumë të lehtë me fjalë kyçen + **as**. +- title: Konstantet + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Konstantet na lejojnë të specifikojmë një vlerë të përbashkët që përdoret gjatë gjithë kohës + + nd kodin tone shumë herë me efikasitet. Në vend të kopjimit të vlerave si variablat + + aty ku përdoren, konstantet zëvendësojnë drejtpërdrejt identifikuesin e tekstit ku + ata + + përdoren me vlerën e tyre në kohën e përpilimit. + + + Ndryshe nga variablat, konstantet duhet të kenë gjithmonë lloje eksplicite. + + + Emrat konstant janë gjithmonë ne `SCREAMING_SNAKE_CASE`. +- title: Vargjet + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Një *array/varg* është një **përmbledhje me gjatësi fikse** të elementeve të të dhënave të gjitha të te njëjta + lloji. + + + Lloji i të dhënave për një *array* është `[T;N]` ku T është lloji i elementeve dhe N + është gjatësia fikse e njohur në kohën e përpilimit. + + + Elementet individuale mund të merren me operatorin `[x]` ku *x* është a + indeksi *usize* (duke filluar nga 0) i elementit që dëshironi. + + + Koleksionet me gjatësi dinamike, të quajtura shpesh vargje dinamike ose të ndryshueshme, janë + prezantuar në një kapitull të mëvonshëm rreth **Vektorëve**. +- title: Funksionet + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Një funksion ka zero ose më shumë parametra. + + + Në këtë shembull, funksioni *add* merr dy argumente të tipit `i32` + (numër i plotë i nënshkruar me gjatësi 32-bit). + + + Nëse thjesht dëshironi të ktheni një shprehje, mund të hiqni fjalën kyçe "kthim". + dhe pikëpresjes në fund, siç bëmë në funksionin *zbris*. + + + Emrat e funksioneve janë gjithmonë në `snake_case`. + + + Këshillë: nëse përcaktoni një funksion, të dhënat që ai pranon quhen parametra. + Nëse e thërrisni atë funksion dhe i kaloni të dhëna, atëherë ai quhet argumente. +- title: Vlerat e shumëfishta të kthimit + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 + content_markdown: > + Funksionet mund të kthejnë vlera të shumta duke kthyer një **tuple** + + të vlerave. + + + Elementet e dyfishta mund të referohen me numrin e tyre të indeksit. + + + Rust mbështet lloje të ndryshme destrukturimi që do t'i shohim në shumë forma, + duke lejuar + + ne të nxjerrim nën-pjesë të strukturave të të dhënave në mënyra ergonomike. Të jesh në + kujdes! +- title: Kthe asgje + content_markdown: > + Nëse asnjë lloj kthimi nuk është specifikuar për një funksion, ai kthen një tuple bosh, + i njohur gjithashtu si një *njësi*. + + + Një tuple bosh përfaqësohet nga `()`. + + + Përdorimi i `()` është i pazakontë, por do të shfaqet aq shpesh sa është mirë të dihet + cfare po ndodh. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021 +- title: Chapter 1 - Conclusion + content_markdown: > + Punë e bukur deri tani! Bazat e Rust nuk janë aq të këqija, apo jo? ne jemi + + duke parë se si mendon përpiluesi Rust. Si programim sistemi + gjuhe + + kujdeset shumë për madhësinë e vlerave në kujtesë, nëse gjërat mund të jenë + modifikuar apo jo, + + dhe sigurohuni që matematika juaj të jetë ajo që dëshironi të jetë. Në vazhdim do të jemi + duke parë disa miq të vjetër: + + "if" testet dhe "for". + + + Më shumë burime: + + + * [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) diff --git a/lessons/al/chapter_2.yaml b/lessons/al/chapter_2.yaml new file mode 100644 index 000000000..175e6a676 --- /dev/null +++ b/lessons/al/chapter_2.yaml @@ -0,0 +1,134 @@ +- title: Kapitulli 2 - Rrjedha e kontrollit bazë + content_markdown: > + Në këtë kapitull le të flasim për metodat bazë të kontrollit të rrjedhës në Rust. + + Nëse jeni të njohur me gjuhët e bazuara në C, do të ndiheni si në shtëpi dhe + ndoshta + + shijoni një ose dy surpriza. +- title: if/else + content_markdown: > + Degëzimi i kodit në Rust nuk është befasues. + + + Kushtet nuk kanë kllapa! A kemi pasur vërtet nevojë për to? Logjika jonë + tani duket bukur dhe e pastër. + + + Të gjithë operatorët tuaj të zakonshëm relacionalë dhe logjikë ende funksionojnë: `==`, `!=`, `<`, + `>`, `<=`, `>=`, `!`, `||`, `&&`. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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!(%22M%C3%AB%20pak%20se%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!(%22%C3%8Bsht%C3%AB%2042%22)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20println!(%22M%C3%AB%20shum%C3%AB%20se%2042%22)%3B%0A%20%20%20%20%7D%0A%7D) +- title: loop/lak + content_markdown: | + Keni nevojë për një lak të pafund? + + Rust e bën të lehtë. + + 'break' do t'i shpëtojë një lak kur të jeni gati. + + "loop" ka një sekret për të cilin do të flasim së shpejti. + code: >- +ttps://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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 +- title: while + content_markdown: | + "while" ju lejon të shtoni me lehtësi një kusht në një lak. + + Nëse kushti vlerësohet në "false", cikli do të dalë. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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) +- title: for + content_markdown: > + Cikli 'for' i Rust është një përmirësim i fuqishëm. Ajo + + përsëritet mbi vlera nga çdo shprehje që vlerësohet në një përsëritës. + Çfarë është + + një përsëritës? Një përsëritës është një objekt që mund të bëni pyetjen "Çfarë është + + + artikulli tjetër qe keni?" derisa të mos ketë më artikuj. + + + Ne do ta shqyrtojmë këtë më shumë në një kapitull të ardhshëm. Ndërkohë, njihni Rust + bën + + te lehtë të krijohen përsëritës që gjenerojnë një sekuencë numrash të plotë. + + + Operatori `..` krijon një përsëritës që gjeneron numra nga fillimi + numri deri në + + por duke mos përfshirë një numër fundor. + + + Operatori `..=` krijon një përsëritës që gjeneron numra nga fillimi + numri deri në + + dhe duke përfshirë një numër fundor. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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) +- title: match + content_markdown: > + Të mungon deklarata switch? Rust ka një fjalë kyçe tepër të dobishme + + për përputhjen e të gjitha kushteve të mundshme të një vlere dhe ekzekutimin e një shtegu kodi nëse + + + ndeshja është e vërtetë. Le të shohim se si funksionon kjo për numrat. Do të kemi më shumë per te + thene + + në kapitujt e ardhshëm mbi përputhjen e modelit të të dhënave më komplekse. Ju premtoj + do + + ia vlej pritja. + + + "match" është shteruese, kështu që të gjitha rastet + + duhen trajtuar. + + + Përputhja e kombinuar me destrukturimin është padyshim një nga + + modelet më të zakonshme që do të shihni në të gjithë Rust. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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!(%22gjeta%20zero%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20mund%20t%C3%AB%20p%C3%ABrputhet%20me%20shum%C3%AB%20vlera%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!(%22gjeta%201%20ose%202!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20mund%20t%C3%AB%20p%C3%ABrputhet%20me%20interval%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!(%22gjeta%20nj%C3%AB%20num%C3%ABr%20nga%203%20deri%20n%C3%AB%209%20p%C3%ABrfshir%C3%AB%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20mund%20t%C3%AB%20lidhet%20numri%20gjetur%20me%20nj%C3%AB%20variab%C3%ABl%0A%20%20%20%20%20%20%20%20numri_gjetur%20%40%2010..%3D100%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20println!(%22gjeta%20numrin%20nga%2010%20deri%20n%C3%AB%20100!%22%2C%20numri_gjetur)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20kjo%20%C3%ABsht%C3%AB%20nje%20lidhje%20e%20p%C3%ABrgjithshme%20q%C3%AB%20duhet%20t%C3%AB%20ekzistoj%C3%AB%20n%C3%AB%20rast%20se%20t%C3%AB%20gjitha%20rastet%20nuk%20jan%C3%AB%20t%C3%AB%20mbuluara%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!(%22gjeta%20di%C3%A7ka%20tjet%C3%ABr!%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D) +- title: Kthimi i nje vlere nga loop-i + content_markdown: | + `loop` mund te ndaloje (break) qe te ktheje nje vlere. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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%22gjeta%20numrin%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!(%22nga%20loop%3A%20%7B%7D%22%2C%20v)%3B%0A%7D%0A) +- title: Kthimi i vlerave nga shprehjet e bllokut + content_markdown: > + `if`, `match`, funksionet dhe blloqet e fushëveprimit kanë të gjitha një mënyrë unike + kthimin e vlerave në Rust. + + + Nëse deklarata e fundit në një bllok "if", "match", funksion ose fushëveprimi është një + shprehje pa + + `;`, Rust do ta kthejë atë si vlerë nga blloku. Kjo + + është një mënyrë e shkëlqyer për të krijuar logjikë koncize që kthen një vlerë që mund të vendoset + në + + një ndryshore te re. + + + Vini re se ai gjithashtu lejon që një deklaratë "if" të funksionojë si një konciz + shprehje treshe. + 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: Kapitull 2 - Konkluzion + content_markdown: > + Shpresoj se kam treguar një paraqitje të shkurtër të fuqisë së Rustit edhe në shumicën e rasteve + + veçoritë themelore të gjuhës. Do të flasim për "for" dhe + + 'match' edhe më në thellësi pasi fitojmë më shumë njohuri për këtë + + mund të shfrytëzojnë aftësitë e tyre. Herën tjetër do të futemi në themelet e Rust + + + strukturat e data-ve. diff --git a/lessons/al/chapter_3.yaml b/lessons/al/chapter_3.yaml new file mode 100644 index 000000000..ee9c66dac --- /dev/null +++ b/lessons/al/chapter_3.yaml @@ -0,0 +1,156 @@ +- title: Kapitulli 3 - Llojet bazë të strukturës së të dhënave/data-ve + content_markdown: > + Është koha të eksplorojmë përtej llojeve bazë! Në këtë kapitull do të shikojmë + më strukturat e të dhënave + + me primitive në Rust, duke i kushtuar vëmendje paraqitjeve të tyre në + memorie. Unë mendoj + + qe do të kënaqeni sa pak Rust fsheh nga ju se si funksionojnë gjërat. +- title: Strukturat + content_markdown: > + Një "struktur" është një koleksion fushash. + + + Një *fushë* është thjesht një vlerë e të dhënave e lidhur me një strukturë të dhënash. Vlera e saj + mund të jetë i një lloji primitiv ose një strukturë të dhënash. + + + Përkufizimi i saj është si një plan për një përpilues se si të vendoset + fusha në kujtesë pranë njëra-tjetrës. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=struct%20SeaCreature%20%7B%0A%20%20%20%20%2F%2F%20String%20%C3%ABsht%C3%AB%20nj%C3%AB%20struktur%C3%AB%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: Metodat e thirrjes + content_markdown: > + Ndryshe nga funksionet, metodat janë funksione të lidhura me një të dhënë specifike + lloji. + + + **metodat statike** — metodat që i përkasin një lloji vetvete thirren duke përdorur + operatorin `::`. + + + **metodat e shembullit** — metodat që i përkasin një shembulli të një lloji + thirren duke përdorur operatorin `.`. + + + Ne do të flasim më shumë për krijimin e metodave tuaja në kapitujt e ardhshëm. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20P%C3%ABrdorimi%20i%20nj%C3%AB%20metode%20statike%20p%C3%ABr%20krijimin%20e%20nj%C3%AB%20instance%20t%C3%AB%20String%0A%20%20%20%20let%20s%20%3D%20String%3A%3Afrom(%22P%C3%ABrshej%20bota!%22)%3B%0A%20%20%20%20%2F%2F%20P%C3%ABrdorimi%20i%20nj%C3%AB%20metode%20n%C3%AB%20instanc%C3%AB%0A%20%20%20%20println!(%22%7B%7D%20%C3%ABsht%C3%AB%20%7B%7D%20karaktere%20gjat%C3%AB.%22%2C%20s%2C%20s.len())%3B%0A%7D%0A) +- title: Memorja + content_markdown: > + Programet Rust kanë 3 rajone memorie ku ruhen të dhënat: + + * **memoria e të dhënave** - Për të dhënat që janë të fiksuara në madhësi dhe **statike** (d.m.th. + gjithmonë i disponueshëm gjatë gjithë jetës së programit). + Merrni parasysh tekstin në programin tuaj (p.sh. "Hello World!"): Bajtet e këtij teksti lexohen vetëm nga një vend + dhe për këtë arsye mund të ruhet në këtë rajon. Përpiluesit bëjnë shumë optimizime + me këtë lloj të dhënash, dhe ato përgjithësisht konsiderohen shumë të shpejta për t'u përdorur që nga ajo kohë + vendndodhjet janë të njohura dhe të fiksuara. + * **stack memorie** - Për të dhënat që deklarohen si variabla brenda + funksionit. + Vendndodhja e kësaj memorie nuk ndryshon kurrë gjatë kohëzgjatjes së një thirrjeje funksioni; për shkak të këtij përpiluesit + mund të optimizojë kodin në mënyrë që të dhënat e grumbullimit të jenë shumë të shpejta për t'u aksesuar. + * **Memorie grumbull ** - Për të dhënat që krijohen ndërsa aplikacioni është + ne vrapim. + Të dhënat në këtë rajon mund të shtohen, zhvendosen, hiqen, ndryshohen përmasat, etj. Për shkak të + natyres se tij dinamike përgjithësisht konsiderohet më e ngadaltë për t'u përdorur, por e lejon + për perdorime shumë më kreative të kujtesës. Kur të dhënat shtohen në këtë rajon ne + quajme atë një **alokim**. Kur të dhënat hiqen nga ky seksion, ne e quajmë atë a + **shpërndarja/dealokim**. +- title: Krijimi i të dhënave në memorie + content_markdown: > + Kur ne **instantojmë** një **struktur** në kodin tonë programi ynë krijon + të dhënat e fushës shoqëruese krah për krah në memorie. + + + Ne instantojmë duke specifikuar të gjitha vlerat e fushës brenda + + + `Emri i strukturës { ... }`. + + + Fushat e strukturës aksesohen duke përdorur një operator me pika `.`. + + + Detajet e kujtesës të shembullit tonë: + + * Teksti brenda thonjëzave është vetëm të dhëna për lexim (p.sh. "Ferris"), prandaj + është + vendosur në *regjionin e memories së të dhënave*. + * Thirrja e funksionit `String::from` krijon një strukturë `String` që vendoset + anësor + krah për krah me fushat e SeaCreature në *stack*. Një varg paraqet tekst që mund të ndryshohet + dhe e bën këtë duke: + 1. Krijimi i memories në *grumbull* për tekstin ku mund të modifikohet + 2. Ruajtja e një referimi në atë vendndodhje memorie në *grumbull* dhe ruajtja e saj në `String` + struct (Më shumë për këtë në mësimet e ardhshme) + * Më në fund dy miqtë tanë *Ferris* dhe *Sara* kanë struktura të dhënash që + do të ketë gjithmonë + vendndodhje fikse në programin tonë, kështu që ato vendosen në *stack*. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&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%20T%C3%AB%20dhenat%20e%20SeaCreature%20jan%C3%AB%20n%C3%AB%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%20%C3%ABsht%C3%AB%20gjithashtu%20n%C3%AB%20stack%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20por%20mban%20nj%C3%AB%20referenc%C3%AB%20n%C3%AB%20t%C3%AB%20dh%C3%ABnat%20n%C3%AB%20heap%0A%20%20%20%20%20%20%20%20animal_type%3A%20String%3A%3Afrom(%22karkalec%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(%22kong%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(%22qent%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(%22truri%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%20%C3%ABsht%C3%AB%20nje%20%7B%7D.%20Ata%20kan%C3%AB%20%7B%7D%20krah%C3%AB%2C%20%7B%7D%20kembe%2C%20dhe%20nje%20%7B%7D%20arm%C3%AB%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%20%C3%ABsht%C3%AB%20nje%20%7B%7D.%20Ata%20kan%C3%AB%20%7B%7D%20krah%C3%AB%2C%20dhe%20%7B%7D%20kembe.%20Nuk%20kan%C3%AB%20arme..%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) +- title: Struktura të ngjashme me tufë + content_markdown: | + Për koncizitet, mund të krijoni struktura që përdoren si një tufë. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=struct%20Location(i32%2C%20i32)%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Kjo%20%C3%ABsht%C3%AB%20ende%20nj%C3%AB%20strukture%20n%C3%AB%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 +- title: Struktura të ngjashme me njësinë + content_markdown: > + Strukturat edhe nuk duhet të kenë fare fusha. + + + Siç u përmend në Kapitullin 1, një *njësi* është një fjalë tjetër për një tuple bosh `()`. + Kjo është arsyeja pse ky lloj strukture quhet *Unit-like*. + + + Ky lloj strukture përdoret rrallë. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=struct%20Marker%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20_m%20%3D%20Marker%3B%0A%7D) +- title: Enumeracionet + content_markdown: > + Enumerimet ju lejojnë të krijoni një lloj të ri që mund të ketë një vlerë prej disa + elementë te etiketuar duke përdorur fjalën kyçe "enum". + + + "match" ndihmon në sigurimin e trajtimit shterues të të gjitha bërjes së vlerave të mundshme të numrit + është një mjet i fuqishëm për të siguruar kod cilësor. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%23!%5Blejohet(dead_code)%5D%20%2F%2F%20ky%20rresht%20parandalon%20sinjalizimet%20e%20kompiluesit%0A%0Aenum%20Lloji%20%7B%0A%20%20%20%20Karkalec%2C%0A%20%20%20%20Zogu%20i%20detit%2C%0A%20%20%20%20Peshku%2C%0A%20%20%20%20Palura%0A%7D%0A%0Astruct%20KrijesaDeti%20%7B%0A%20%20%20%20lloji%3A%20Lloji%2C%0A%20%20%20%20emri%3A%20String%2C%0A%20%20%20%20krah%C3%ABt%3A%20i32%2C%0A%20%20%20%20kembe%3A%20i32%2C%0A%20%20%20%20arm%C3%ABt%3A%20String%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20ferris%20%3D%20KrijesaDeti%20%7B%0A%20%20%20%20%20%20%20%20lloji%3A%20Lloji%3A%3AKarkalec%2C%0A%20%20%20%20%20%20%20%20emri%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20krah%C3%ABt%3A%202%2C%0A%20%20%20%20%20%20%20%20kembe%3A%204%2C%0A%20%20%20%20%20%20%20%20arm%C3%ABt%3A%20String%3A%3Afrom(%22kam%C3%ABy%22)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.lloji%20%7B%0A%20%20%20%20%20%20%20%20Lloji%3A%3AKarkalec%20%3D%3E%20println!(%22%7B%7D%20%C3%ABsht%C3%AB%20nj%C3%AB%20karkalec%22%2Cferris.emri)%2C%0A%20%20%20%20%20%20%20%20Lloji%3A%3AZogu%20i%20detit%20%3D%3E%20println!(%22%7B%7D%20%C3%ABsht%C3%AB%20nj%C3%AB%20zog%20i%20detit%22%2Cferris.emri)%2C%0A%20%20%20%20%20%20%20%20Lloji%3A%3APeshku%20%3D%3E%20println!(%22%7B%7D%20%C3%ABsht%C3%AB%20nj%C3%AB%20peshk%22%2Cferris.emri)%2C%0A%20%20%20%20%20%20%20%20Lloji%3A%3APalura%20%3D%3E%20println!(%22%7B%7D%20%C3%ABsht%C3%AB%20nj%C3%AB%20palur%C3%AB%22%2Cferris.emri)%2C%0A%20%20%20%20%7D%0A%7D) +- title: Enumerations With Data + content_markdown: > + Elementet "enum" mund të kenë gjithashtu një ose më shumë lloje të dhënash që i lejojnë ata të sillen + si *union* nga C. + + + Kur një model "enum" përputhet duke përdorur "match", ju mund të lidhni një ndryshore + emër për secilën vlerë të të dhënave. + + + Detajet e memories së `enum`: + + * Një vlerë e të dhënave enum do të ketë një madhësi memorie të barabartë me elementin e saj më të madh. + Kjo lejon që të gjitha vlerat potenciale të përshtaten në të njëjtën hapësirë të memories. + + * Përveç llojeve të të dhënave të elementit (nëse ka), çdo element ka gjithashtu një + vlerë numerike që përfaqëson se cili etiketë është. + + + Detaje të tjera: + + * 'Enum' i Rust është diçka e njohur gjithashtu si një bashkim *etiketuar*. + + * Kombinimi i llojeve për të krijuar një lloj të ri është ajo që njerëzit nënkuptojnë kur ata + Ndryshku ka *lloje algjebrike*. + code: >- +https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%23!%5Blejohet(dead_code)%5D%20%2F%2F%20ky%20rresht%20parandalon%20sinjalizimet%20e%20kompiluesit%0A%0Aenum%20Lloji%20%7B%20Karkalec%2C%20Zogu%20i%20detit%2C%20Peshku%2C%20Palura%20%7D%0Aenum%20LlojiVeneni%20%7B%20Acid%2C%20Dhimbshme%2C%20Vdekjeprurese%20%7D%0Aenum%20Madhesia%20%7B%20Madhe%2C%20Vogel%20%7D%0Aenum%20Arma%20%7B%0A%20%20%20%20Krah%28i32%2C%20Madhesia%29%2C%0A%20%20%20%20Venin%28LlojiVeneni%29%2C%0A%20%20%20%20Asnje%0A%7D%0A%0Astruct%20KrijesaDeti%20%7B%0A%20%20%20%20lloji%3A%20Lloji%2C%0A%20%20%20%20emri%3A%20String%2C%0A%20%20%20%20krah%C3%ABt%3A%20i32%2C%0A%20%20%20%20kembe%3A%20i32%2C%0A%20%20%20%20arma%3A%20Arma%2C%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20Te%20dhenat%20e%20Krijes%D0%91eDeti%20jane%20ne%20stek%0A%20%20%20%20let%20ferris%20%3D%20KrijesaDeti%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Struktura%20String%20gjithashtu%20eshte%20ne%20stek%2C%0A%20%20%20%20%20%20%20%20%2F%2F%20por%20mban%20nje%20referenc%20ne%20te%20dhena%20ne%20heap%0A%20%20%20%20%20%20%20%20lloji%3A%20Lloji%3A%3AKarkalec%2C%0A%20%20%20%20%20%20%20%20emri%3A%20String%3A%3Afrom(%22Ferris%22)%2C%0A%20%20%20%20%20%20%20%20krah%C3%ABt%3A%202%2C%0A%20%20%20%20%20%20%20%20kembe%3A%204%2C%0A%20%20%20%20%20%20%20%20arma%3A%20Arma%3A%3AKrah(2%2C%20Madhesia%3A%3AVogel)%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20match%20ferris.lloji%20%7B%0A%20%20%20%20%20%20%20%20Lloji%3A%3AKarkalec%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20match%20ferris.arma%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Arma%3A%3AKrah(nr_krah%C3%ABve%2Cmadhesia)%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%20pershkrim_madh%C3%ABsie%20%3D%20match%20madhesia%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%20Madhesia%3A%3AMadhe%20%3D%3E%20%22madhe%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%20Madhesia%3A%3AVogel%20%3D%3E%20%22vogel%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%20%C3%ABsht%C3%AB%20nj%C3%AB%20karkalec%20me%20%7B%7D%20%7B%7D%20krah%C3%AB%22%2C%20nr_krah%C3%ABve%2C%20pershkrim_madh%C3%ABsie)%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%20%C3%ABsht%C3%AB%20nj%C3%AB%20karkalec%20me%20nj%C3%AB%20arm%C3%AB%20tjet%C3%ABr%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%20%C3%ABsht%C3%AB%20nj%C3%AB%20kafsh%C3%AB%20tjet%C3%ABr%22)%2C%0A%20%20%20%20%7D%0A%7D) +- title: Kapitulli 3 - Konkluzion + content_markdown: > + Sa emocionuese! Tani kemi mjetet më themelore për përfaqësimin e formës së + ideve tona në kod. Shpresojmë tani ne + + mund të shohim një dritë sesi funksionet themelore të Rust funksionojnë në harmoni dhe + koncizitet me llojet e tij. Në vazhdim do të flasim për + + një koncept që u jep llojeve tona të të dhënave edhe më shumë fleksibilitet të përfaqësimit: + *gjenerike*. diff --git a/lessons/al/common_words.yaml b/lessons/al/common_words.yaml new file mode 100644 index 000000000..4673e3f8f --- /dev/null +++ b/lessons/al/common_words.yaml @@ -0,0 +1,9 @@ +chapter: Kapitull +tor: Tut i Rustit +next: Tjetri +previous: Paraardhesi +toc: Tabela e permbajtjeve +lessons: Mesimet +untranslated: E paperkthyer +welcometothe: Miresevine ne +presstocontinue: Shtyp per te vazhduar