Definire il primo enum
Crei semplici tipi enumerati.
Definire il primo enum è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 1 di 4. 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 4 lezioni in totale.
What Is an Enum?
Un enum (enumerazione) permette di definire un tipo elencandone i possibili valori, chiamati varianti. Un valore di tale tipo può essere solo una di queste varianti.
Gli enum sono particolarmente utili quando qualcosa ha un insieme fisso di stati, come i punti cardinali o i semi in un mazzo di carte.
enum Direction {
North,
South,
East,
West,
}Dichiarare un enum
Si dichiara un enum con la parola chiave enum, un nome e un elenco di varianti separate da virgole all'interno di parentesi graffe.
Per convenzione, i nomi degli enum usano il PascalCase (come Direction), così come i nomi delle varianti (come North).
enum TrafficLight {
Red,
Yellow,
Green,
}Creare un valore di un enum
Per creare un valore, si scrive il nome dell'enum, due due punti :: e quindi la variante.
Per esempio, Direction::North crea un valore di tipo Direction. :: indica a Rust a quale enum appartiene la variante.
enum Direction {
North,
South,
East,
West,
}
fn main() {
let heading = Direction::East;
println!("Created a direction value!");
}Gli enum sono tipi
Una volta definito, un enum è un vero e proprio tipo, proprio come i32 o bool. Può memorizzarne i valori nelle variabili e passarli alle funzioni.
Una funzione che accetta un Direction accetterà qualsiasi sua variante, ma nient'altro.
enum Direction {
North,
South,
}
fn describe(d: Direction) {
println!("Got a direction");
}
fn main() {
describe(Direction::North);
}Perché non usare semplicemente dei numeri?
Potrebbe rappresentare un semaforo con 0, 1 e 2, ma nulla Le impedirebbe di usare accidentalmente 7.
Un enum rende gli stati non validi impossibili: il compilatore garantisce che il valore sia sempre una delle varianti elencate. È più sicuro e molto più facile da leggere.
Derivare Debug per stampare
Per impostazione predefinita, Rust non sa come stampare un enum. Aggiungendo #[derive(Debug)] sopra l'enum, potrà stamparlo con il formatter {:?}.
È molto utile per eseguire rapidamente il debug mentre impara.
#[derive(Debug)]
enum Direction {
North,
South,
}
fn main() {
let d = Direction::South;
println!("{:?}", d);
}Confrontare i valori di un enum
Aggiunga #[derive(PartialEq)] per poter confrontare le varianti con ==.
È utile per controlli semplici, anche se per comportamenti più ricchi l'espressione match (che vedrà tra poco) è solitamente lo strumento migliore.
#[derive(PartialEq)]
enum Light {
Red,
Green,
}
fn main() {
let l = Light::Red;
if l == Light::Red {
println!("Stop!");
}
}È possibile usare molte varianti
Un enum può avere tutte le varianti necessarie. Appartengono tutte allo stesso tipo.
Elencare insieme gli stati correlati mantiene organizzato il codice e rende immediatamente evidenti le opzioni possibili.
enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}Gli enum nella libreria standard
La libreria standard di Rust usa gli enum ovunque. Due esempi famosi sono Option (un valore che può essere presente o assente) e Result (successo o errore).
Imparare ora gli enum La prepara a comprendere in seguito questi tipi fondamentali.
// Option is an enum in std:
// enum Option<T> {
// Some(T),
// None,
// }Copiare enum semplici
Gli enum le cui varianti non contengono dati possono derivare Clone e Copy. In questo modo i valori vengono copiati automaticamente invece di essere spostati.
Ciò fa comportare i piccoli enum di stato come semplici valori, ad esempio gli interi.
#[derive(Clone, Copy)]
enum Coin {
Heads,
Tails,
}
fn main() {
let a = Coin::Heads;
let b = a; // a is still usable
}Mettere tutto insieme
Ecco un programma completo: definire un enum, creare un valore e stamparlo usando Debug.
Lo esegua e provi a cambiare Green con un'altra variante per vedere l'output aggiornarsi.
#[derive(Debug)]
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let current = TrafficLight::Green;
println!("Light is {:?}", current);
}Verifica rapida
Verifichi la Sua comprensione delle nozioni di base sugli enum.
Riepilogo
Ha imparato che un enum definisce un tipo a partire da un elenco fisso di varianti, dichiarato con la parola chiave enum.
Si creano i valori con EnumName::Variant e si possono derivare Debug, PartialEq o Copy per stamparli, confrontarli e copiarli. In seguito imparerà a reagire a ogni variante con match.
Domande Frequenti
La lezione «Definire il primo enum» è gratuita?
Sì — il testo completo di «Definire il primo enum» è 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 4 lezioni in totale.
Cosa imparerò in «Definire il primo enum»?
Crei semplici tipi enumerati. 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 1 di 4.
Quanto tempo richiede la lezione «Definire il primo enum»?
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 il primo enum
- Gestire le varianti degli enum con match
- Enum con dati
- Guardie e binding in match