Lecții din modul (1/2)
Definirea și instanțierea structurilor
Structurile (sau structuri) în Rust sunt tipuri de date personalizate care vă permit să grupați mai multe valori asociate împreună. Sunt similare cu obiectele sau clasele din alte limbi, dar fără moștenire.
Definirea unui Struct
Pentru a defini o structură, folosim cuvântul cheie struct urmat de numele din PascalCase. În interior, definim numele și tipurile câmpurilor:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}Crearea unei Instanțe
Pentru a folosi o structură, trebuie să creăm o instanță completând toate câmpurile specificate:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}Mutabilitatea structurii
În Rust, întreaga instanță trebuie să fie marcată ca mutabilă (mut) dacă doriți să modificați oricare dintre câmpurile sale. Rust nu permite marcarea doar anumitor câmpuri ca mutabile:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}Structuri tuple și structuri asemănătoare unității
Rust acceptă, de asemenea, alte două formate de struct, în afară de structurile clasice cu câmpuri numite:
- Tuple Structs: au un nume asociat, dar câmpurile nu au nume individuale, ci doar tipuri. Sunt utile pentru definirea și diferențierea unor tipuri specifice:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Structuri asemănătoare unităților: nu definesc niciun câmp. Se comportă ca tipul de unitate
(). Sunt utile atunci când trebuie să implementați comportamente (trăsături) pe un tip fără a stoca date în el.
Încercați-l singur
Definiți structura User de mai sus principal cu câmpurile: nume de utilizator (tip șir) și activ (tip bool).
Afișează indiciu
Scrieți `struct User { nume de utilizator: String, active: bool }`before`main`.
Soluție disponibilă după 3 încercări
Modificați user1 pentru a-l face mutabil (lasă mut user1) și schimbați câmpul activ la false înainte de imprimare.
Afișează indiciu
Adăugați `mut`la`let user1`pentru a face`let mut user1`, apoi introduceți `user1.active = false;`.
Soluție disponibilă după 3 încercări
Definiți o structură tuplu numită Color care conține trei câmpuri i32. În principal, instanțiați Color cu valorile 255, 0 și 100, atribuind-o variabilei my_color, apoi imprimați primul său element (valoarea roșie) folosind println!.
Afișează indiciu
Definiți structura tuplu cu `struct Color(i32, i32, i32);`. În principal, instanțiază-l ca `let my_color = Color(255, 0, 100);` și imprimă valoarea roșie cu`my_color.0`.
Soluție disponibilă după 3 încercări