Ce face tuple (tupluri)
Un tuplu adună câteva valori, posibil de tipuri diferite: ("Ana", 17, 9.5) are tipul (&str, i32, f64). Numărul de elemente este fix și face parte din tip.
Elementele se citesc după poziție, cu t.0, t.1 etc., sau se desfac într-un let: let (nume, varsta, media) = t;. Un element de care nu ai nevoie se ignoră cu _.
Tuplurile sunt utile pentru a returna mai multe valori dintr-o funcție. Tuplul gol () se numește „unit” și este ce returnează funcțiile fără ->. Pentru date cu mai mult înțeles, un struct cu câmpuri numite este mai clar.
Exemple
Exemplul 1: Creare, acces după poziție și desfacere
{:?} afișează tot tuplul. Desfacerea dă nume elementelor, iar _ ignoră vârsta.
fn main() {
let elev = ("Ana Popescu", 17, 9.45);
println!("{:?}", elev);
println!("Nume: {}, media: {}", elev.0, elev.2);
let (nume, _, media) = elev;
println!("{nume} are media {media}");
}
Rezultat
("Ana Popescu", 17, 9.45)
Nume: Ana Popescu, media: 9.45
Ana Popescu are media 9.45
Exemplul 2: Un vector de tupluri
Fiecare element este o pereche (oraș, temperatură). În for, perechea este desfăcută direct. Sortarea după al doilea element folosește t.1.
fn main() {
let mut orase = vec![("Iași", 21), ("Cluj", 18), ("Constanța", 24)];
orase.sort_by_key(|t| t.1);
for (oras, grade) in &orase {
println!("{oras:<10} {grade}°C");
}
}
Rezultat
Cluj 18°C
Iași 21°C
Constanța 24°C
Greșeli frecvente
- Scrii
(5)crezând că este un tuplu cu un element. Este doar numărul 5 între paranteze; tuplul cu un element se scrie(5,). - Accesezi elementele cu un indice calculat (
t[i]saut.i). Pozițiile unui tuplu trebuie scrise direct (t.0), pentru că fiecare poate avea alt tip. Pentru acces după indice folosește un array sau unVec. - Folosești tupluri mari (
(String, u32, f64, bool, String)) prin tot programul. Nimeni nu mai știe ce înseamnăt.3; definește unstruct.
Comenzi înrudite
array ([T; N]): Un șir de lungime fixă, cunoscută la compilare, cu elemente de același tip, păstrat direct pe stivă.struct: Definește un tip nou care grupează mai multe valori cu nume (câmpuri), de exemplu un elev cu nume, clasă și medie.pattern matching (tipare): Tiparele descriu forma unei valori și scot din ea părțile de care ai nevoie: în let, match, if let, for și parametrii funcțiilor.fn: Declară o funcție. Tipul fiecărui parametru este obligatoriu, iar ultima expresie fără punct și virgulă este valoarea returnată.