Lezioni del modulo (1/2)
Definire e istanziare Struct
Le struct (o strutture) in Rust sono tipi di dati personalizzati che ti consentono di raggruppare insieme più valori correlati. Sono simili agli oggetti o classi in altri linguaggi, ma senza ereditarietà.
Definire una Struct
Per definire una struct, utilizziamo la parola chiave struct seguita dal nome in PascalCase. All'interno definiamo i nomi e i tipi dei campi:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}
Creare un'Istanza
Per utilizzare una struct, dobbiamo creare un'istanza compilando tutti i campi specificati:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Accesso ai campi tramite notazione con punto
println!("L'utente {} è attivo? {}", user1.username, user1.active);
}
Mutabilità delle Struct
In Rust, l'intera istanza deve essere marcata come mutabile (mut) se desideri modificare uno qualsiasi dei suoi campi. Rust non consente di marcare solo alcuni campi come mutabili:
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; // Valido perché user1 è mutabile!
}
Tuple Structs e Unit-Like Structs
Rust supporta altri due formati di struct oltre alle classiche struct a campi nominati:
- Tuple Structs: Hanno un nome associato ma i campi non hanno nomi individuali, possiedono solo il tipo. Sono utili per definire e differenziare tipi specifici:
Code
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Unit-Like Structs: Non definiscono alcun campo. Si comportano come il tipo
(). Risultano utili quando occorre implementare dei comportamenti (trait) su un tipo senza memorizzarvi dati.
Prova tu
Definisci la struct User sopra il main con i campi: username (di tipo String) e active (di tipo bool).
Mostra suggerimento
Scrivi `struct User { username: String, active: bool }`prima del`main`.
Soluzione disponibile dopo 3 tentativi
Modifica user1 rendendola mutabile (let mut user1) e cambia il campo active a false prima della stampa.
Mostra suggerimento
Aggiungi `mut`a`let user1`per farla diventare`let mut user1`, poi inserisci `user1.active = false;`.
Soluzione disponibile dopo 3 tentativi
Definisci una tuple struct chiamata Color contenente tre campi interi i32. Nel main, istanzia Color con i valori 255, 0 e 100 assegnandola alla variabile my_color, quindi stampane il primo elemento (valore rosso) usando println!.
Mostra suggerimento
Definisci la tuple struct con `struct Color(i32, i32, i32);`. Nel main, istanziala come `let my_color = Color(255, 0, 100);`e stampa il valore rosso con`my_color.0`.
Soluzione disponibile dopo 3 tentativi