Rust Basics
Generički tipovi
Kreirajte strukturu gde jedna od njihovih vrednosti može biti bilo koji tip
Option, Some & None
Tip Option znači da vrednost može biti tipa Some (postoji nešto) ili None:
Možete koristiti funkcije poput is_some()
ili is_none()
da proverite vrednost Option-a.
Makroi
Makroi su moćniji od funkcija jer se proširuju da bi proizveli više koda od koda koji ste ručno napisali. Na primer, potpis funkcije mora da deklariše broj i tip parametara koje funkcija ima. Makroi, s druge strane, mogu da prime promenljiv broj parametara: možemo pozvati println!("hello")
sa jednim argumentom ili println!("hello {}", name)
sa dva argumenta. Takođe, makroi se proširuju pre nego što kompajler tumači značenje koda, pa makro može, na primer, da implementira trait na datom tipu. Funkcija ne može, jer se poziva u vreme izvršavanja, a trait treba da bude implementiran u vreme kompilacije.
Iterirajte
Iteracija je proces ponavljanja određenog bloka koda više puta. U programiranju, iteracija se koristi za izvršavanje istog koda više puta, obično na različitim ulaznim podacima. To omogućava efikasno rukovanje velikim skupovima podataka ili izvršavanje istih operacija na različitim elementima.
U Rustu, iteracija se može postići korišćenjem petlji. Postoje dve osnovne vrste petlji u Rustu: for
petlja i while
petlja.
for
petlja
for
petljafor
petlja se koristi kada želite da iterirate kroz kolekciju elemenata. Može se koristiti sa različitim tipovima kolekcija, kao što su vektori, nizovi ili opsezi.
while
petlja
while
petljawhile
petlja se koristi kada želite da iterirate kroz blok koda dok je određeni uslov ispunjen. Uslov se proverava pre svake iteracije petlje.
loop
petlja
loop
petljaloop
petlja se koristi kada želite da iterirate kroz blok koda beskonačno mnogo puta, ili dok se ne ispuni određeni uslov za prekid petlje.
Korišćenje odgovarajuće petlje zavisi od specifičnih zahteva vašeg koda.
Rekurzivna kutija
A recursive box is a data structure in Rust that allows for the creation of self-referential types. It is commonly used when dealing with data structures that have a recursive nature, such as linked lists or trees.
To create a recursive box, you can use the Box
type provided by Rust. The Box
type is a smart pointer that provides heap allocation and ownership of the data it points to.
Here is an example of how to create a recursive box:
In this example, the Node
struct contains a value
field of type i32
and a next
field of type Option<Box<Node>>
. The next
field is an Option
type because it can either contain a Box
pointing to the next Node
, or None
to indicate the end of the list.
By using Box
, we can allocate memory on the heap for each Node
and create a recursive structure. The Box
type ensures that the memory is deallocated correctly when it goes out of scope.
Recursive boxes are a powerful tool in Rust for creating complex data structures that require self-referentiality. They provide a safe and efficient way to handle recursive data without causing memory leaks or undefined behavior.
ako
The if
statement is used to execute a block of code only if a certain condition is true. It has the following syntax:
The condition
is an expression that evaluates to either true
or false
. If the condition is true
, the code block inside the if
statement will be executed. If the condition is false
, the code block will be skipped.
Here's an example:
In this example, the code inside the if
statement will be executed because the condition number > 0
is true. The output will be The number is positive
.
ako
Naredba ako
se koristi da izvrši blok koda samo ako je određeni uslov tačan. Ima sledeću sintaksu:
Uslov
je izraz koji se vrednuje kao tačno
ili netačno
. Ako je uslov tačan
, blok koda unutar naredbe ako
će se izvršiti. Ako je uslov netačan
, blok koda će biti preskočen.
Evo primera:
U ovom primeru, kod unutar naredbe ako
će se izvršiti jer je uslov broj > 0
tačan. Ispis će biti Broj je pozitivan
.
poklapanje
match
je konstrukcija jezika Rust koja omogućava upoređivanje vrednosti sa različitim oblicima i izvršavanje odgovarajućeg koda na osnovu rezultata upoređivanja. Ova konstrukcija je veoma korisna za obradu različitih slučajeva ili opcija.
Evo osnovnog sintaksnog obrasca match
izraza:
U ovom primeru, vrednost
se upoređuje sa vrednost1
, vrednost2
i _
. Ako vrednost
odgovara vrednost1
, izvršava se kod unutar bloka vrednost1
. Ako vrednost
odgovara vrednost2
, izvršava se kod unutar bloka vrednost2
. Ako vrednost
ne odgovara ni jednoj od prethodnih vrednosti, izvršava se kod unutar bloka _
.
Ova konstrukcija omogućava efikasno upravljanje različitim slučajevima i olakšava čitanje i pisanje čistog i jasnog koda.
petlja (beskonačna)
Kada želite da izvršite određeni blok koda beskonačan broj puta, možete koristiti petlju. Petlja se sastoji od uslova koji se proverava na početku svake iteracije. Ako je uslov ispunjen, blok koda se izvršava, a zatim se petlja ponavlja. U suprotnom, petlja se prekida i izvršavanje se nastavlja sa sledećim delom koda.
Da biste napravili beskonačnu petlju u Rustu, možete koristiti ključnu reč loop
. Ova petlja će se izvršavati sve dok se ne prekine ručno ili dok se ne naiđe na break
izjavu unutar petlje.
Ova petlja je korisna kada želite da izvršite određene zadatke koji zahtevaju neprekidno izvršavanje, kao što je čitanje podataka sa senzora ili obrada zahteva u serverskoj aplikaciji.
dok
while
petlja se koristi za ponavljanje određenog bloka koda sve dok je određeni uslov ispunjen.
Ovde je uslov
izraz koji se evaluira kao true
ili false
. Ako je uslov
true
, blok koda unutar while
petlje će se izvršavati. Kada se uslov
evaluira kao false
, izvršavanje petlje se zaustavlja i program nastavlja sa izvršavanjem koda nakon petlje.
Na primer:
Ovde će se blok koda unutar while
petlje izvršiti pet puta, jer će se brojac
povećavati za jedan u svakoj iteraciji.
za
ako je
if let
je skraćenica za if let Some(x) = y
. Ova konstrukcija se koristi za pattern matching i omogućava da se izvrši određeni kod samo ako je y
jednak Some(x)
. Ako y
nije jednak Some(x)
, kod se ne izvršava.
U ovom primeru, if let
proverava da li je option
jednak Some(x)
. Ako jeste, vrednost x
se koristi u bloku if
i ispisuje se "Vrednost je 5". Ako option
nije jednak Some(x)
, izvršava se blok else
i ispisuje se "Nema vrednosti".
while let
while let
petlja je korisna kada želite da izvršavate određene radnje dok se određeni obrazac podudara sa vrednošću. Ova petlja se koristi u Rust programiranju.
Ova petlja će se izvršavati sve dok iterator.next()
vraća Some(value)
. Kada iterator.next()
vrati None
, petlja se prekida.
Ova petlja je korisna kada radite sa iteratorima i želite da izvršavate određene radnje za svaku vrednost koju iterator vraća.
Traitovi
Kreiranje nove metode za tip
Testovi
Testovi su ključni deo procesa razvoja softvera. Oni se koriste za proveru ispravnosti funkcionalnosti i otkrivanje grešaka u kodu. Testovi se mogu pisati na različite načine, kao što su jedinični testovi, integracioni testovi i sistemski testovi.
Jedinični testovi se fokusiraju na proveru ispravnosti pojedinačnih delova koda, kao što su funkcije ili metode. Oni se izvršavaju izolovano, bez zavisnosti od drugih delova sistema. Integracioni testovi se koriste za proveru ispravnosti interakcije između različitih delova sistema. Oni se izvršavaju na nivou modula ili komponenti. Sistemski testovi se koriste za proveru ispravnosti celokupnog sistema, uključujući sve njegove delove i interakcije.
Testovi se mogu pisati ručno ili automatski. Ručno pisanje testova može biti vremenski zahtevno i podložno greškama. Automatsko pisanje testova koristi alate i biblioteke za generisanje i izvršavanje testova. Automatski testovi su efikasniji i pouzdaniji, jer se mogu lako ponavljati i ažurirati.
Prilikom pisanja testova, važno je definisati očekivane rezultate i uslove za prolazak testa. Ovo omogućava jasnoću i objektivnost u oceni ispravnosti koda. Takođe je važno pokriti različite scenarije i granice kako bi se osigurala potpuna provera funkcionalnosti.
Testiranje je iterativan proces koji se obavlja tokom celog razvojnog ciklusa. Redovno testiranje pomaže u otkrivanju grešaka i poboljšanju kvaliteta softvera.
Threadovanje
Arc
Arc može koristiti Clone da bi kreirao više referenci ka objektu kako bi ih prosledio threadovima. Kada poslednja referenca koja pokazuje na vrednost izađe iz opsega, promenljiva se briše.
Niti
U ovom slučaju ćemo niti proslediti promenljivu koju će moći da izmeni.
Last updated