Enum per tipi personalizzati
Utilizzi le enum per definire tipi che possono assumere una tra diverse varianti, spesso contenenti dati associati.
Enum per tipi personalizzati è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 3 lezioni in totale.
Enum: scelte per tipi personalizzati
Benvenuto nelle enum per tipi personalizzati! In Rust, le enum (enumerazioni) consentono di definire un tipo che può corrispondere a una tra diverse varianti possibili e distinte.
Un'enum permette di esprimere: "Questo elemento può essere A, OPPURE B, OPPURE C." È estremamente utile per rappresentare stati o scelte differenti.
Definire una enum semplice
Per definire un'enum, si usa la parola chiave enum seguita dal nome e da parentesi graffe contenenti le varianti. Ogni variante rappresenta una scelta distinta.
Ecco un semplice esempio con i punti cardinali:
enum Direction {
North,
South,
East,
West,
}
fn main() {
let my_direction = Direction::North;
println!("My direction is {:?}", my_direction);
}Enum con dati associati
A differenza delle varianti semplici, le varianti di un'enum possono anche contenere dati! Questo rende le enum molto potenti, perché ogni variante può contenere il proprio insieme specifico di informazioni.
I dati possono essere una tupla (come (i32, String)) oppure una struct (come { x: i32, y: i32 }).
I dati associati in azione
Vediamo un'enum in cui ogni variante rappresenta un tipo diverso di messaggio: alcune contengono dati, altre no.
Noti che Move usa una struct, Write usa una String e ChangeColor usa una tupla.
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {
let m1 = Message::Quit;
let m2 = Message::Move { x: 10, y: 20 };
let m3 = Message::Write(String::from("hello"));
let m4 = Message::ChangeColor(255, 0, 128);
// We can't directly print enums with associated data using {:?}
// without deriving Debug, which we'll cover later.
// For now, just know these instances are created.
println!("Messages created!");
}L'enum `Option`: gestire l'assenza
Una delle enum fondamentali di Rust è Option<T>. Viene usata per rappresentare valori che potrebbero esistere oppure no, evitando gli errori dei puntatori null comuni in altri linguaggi.
Some(T): la variante che contiene un valore di tipoT.None: la variante che rappresenta l'assenza di un valore.
Usare `Option<T>` in modo efficace
Option<T> obbliga a gestire esplicitamente sia il caso Some sia il caso None, rendendo il codice più sicuro e robusto. Niente più arresti anomali imprevisti causati da null!
Ecco come si potrebbe usare:
fn find_item(id: i32) -> Option<String> {
if id == 7 {
Some(String::from("Found item 7!"))
} else {
None
}
}
fn main() {
let item1 = find_item(7);
let item2 = find_item(5);
println!("Item 1: {:?}", item1);
println!("Item 2: {:?}", item2);
}In breve: l'enum `Result`
Un'altra enum fondamentale è Result<T, E>, usata per la gestione degli errori. Ha due varianti:
Ok(T): indica il successo e contiene il valore prodotto dall'operazione riuscita.Err(E): indica un fallimento e contiene un valore di errore.
Approfondiremo Result in una lezione successiva, ma è utile sapere che si tratta di un altro potente schema basato sulle enum!
Metodi sulle enum
Come per le struct, è possibile definire metodi per le enum usando un blocco impl. Questi metodi possono eseguire azioni o restituire valori in base alla variante dell'enum.
Aggiungiamo un metodo call alla nostra enum Message dell'esempio precedente:
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
println!("A message was called!");
}
}
fn main() {
let m = Message::Write(String::from("hello"));
m.call();
}Verifica rapida sulle enum
Quali delle seguenti affermazioni sulle enum di Rust sono vere?
Riepilogo: enum per tipi personalizzati
Ottimo lavoro! Ha imparato come le enum di Rust offrano un modo potente per definire tipi personalizzati che possono corrispondere a una tra diverse varianti.
- Le enum consentono di rappresentare chiaramente scelte e stati.
- Le varianti possono contenere dati associati, rendendole estremamente flessibili.
- L'enum
Option<T>è fondamentale per gestire in sicurezza l'assenza di un valore. - Le enum possono avere metodi definiti con blocchi
impl.
Ora esploreremo come lavorare con queste varianti delle enum usando il potente pattern matching!
Domande Frequenti
La lezione «Enum per tipi personalizzati» è gratuita?
Sì — il testo completo di «Enum per tipi personalizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 3 lezioni in totale.
Cosa imparerò in «Enum per tipi personalizzati»?
Utilizzi le enum per definire tipi che possono assumere una tra diverse varianti, spesso contenenti dati associati. Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.
Quanto tempo richiede la lezione «Enum per tipi personalizzati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Definire e utilizzare le struct
- Enum per tipi personalizzati
- Pattern matching avanzato