Énumérés avec données
Associez des valeurs aux variantes.
Énumérés avec données est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.
Les variantes peuvent contenir des données
Jusqu’à présent, nos variantes n’étaient que des noms. En Rust, une variante peut aussi contenir des données entre parenthèses.
Cela permet à une seule énumération de décrire à la fois la nature de la valeur et la valeur elle-même.
enum Message {
Quit,
Move(i32, i32),
Write(String),
}Une variante avec une valeur
Placez un type entre parenthèses pour associer une donnée à une variante.
Ici, Celsius(f64) signifie que la variante Celsius contient un nombre f64. Vous fournissez ce nombre lors de la création de la valeur.
enum Temperature {
Celsius(f64),
Fahrenheit(f64),
}
fn main() {
let t = Temperature::Celsius(21.5);
println!("Created a temperature");
}Des variantes avec plusieurs valeurs
Une variante peut contenir plusieurs valeurs séparées par des virgules.
Move(i32, i32) stocke deux entiers, par exemple une coordonnée x et une coordonnée y. Vous transmettez les deux valeurs lors de sa création.
enum Shape {
Circle(f64),
Rectangle(f64, f64),
}
fn main() {
let r = Shape::Rectangle(3.0, 4.0);
println!("Made a rectangle");
}Extraire des données avec match
Pour lire les données contenues dans une variante, nommez-les dans le motif. Ces noms deviennent des variables que vous pouvez utiliser dans cette branche.
Ici, Shape::Circle(r) associe le rayon stocké à r.
enum Shape {
Circle(f64),
Rectangle(f64, f64),
}
fn main() {
let s = Shape::Circle(2.0);
match s {
Shape::Circle(r) => println!("radius {}", r),
Shape::Rectangle(w, h) => println!("{} x {}", w, h),
}
}Utiliser les valeurs associées
Une fois les données associées à un nom, vous pouvez les utiliser dans des calculs comme n’importe quelle variable.
Ce programme applique un filtrage à une forme et calcule sa surface, puis renvoie le résultat de match.
enum Shape {
Circle(f64),
Rectangle(f64, f64),
}
fn main() {
let s = Shape::Rectangle(3.0, 4.0);
let area = match s {
Shape::Circle(r) => 3.14 * r * r,
Shape::Rectangle(w, h) => w * h,
};
println!("area = {}", area);
}Des données différentes pour chaque variante
Chaque variante peut contenir une forme de données différente, et certaines peuvent ne rien contenir du tout.
Cette souplesse rend les énumérations si expressives : un seul type modélise de nombreux cas distincts.
enum Message {
Quit,
Move(i32, i32),
Write(String),
}Variantes semblables à des structures
Une variante peut utiliser des champs nommés entre accolades, comme une structure. Cela clarifie la signification de chaque champ.
Vous la construisez en nommant chaque champ et vous l’utilisez de la même manière avec match.
enum Event {
Click { x: i32, y: i32 },
KeyPress(char),
}
fn main() {
let e = Event::Click { x: 10, y: 20 };
match e {
Event::Click { x, y } => println!("click at {},{}", x, y),
Event::KeyPress(c) => println!("key {}", c),
}
}Chaînes de caractères dans les variantes
Les variantes peuvent contenir des données possédées comme une String. Le filtrage vous donne accès au texte.
Remarque : le filtrage par valeur déplace les données hors de la valeur, ce qui convient ici puisque nous les utilisons immédiatement.
enum Message {
Write(String),
Quit,
}
fn main() {
let m = Message::Write(String::from("hello"));
match m {
Message::Write(text) => println!("text: {}", text),
Message::Quit => println!("bye"),
}
}L’énumération Option standard
Option<T>, intégré à Rust, est une énumération contenant des données : Some(T) contient une valeur et None ne contient rien.
C’est ainsi que Rust représente « peut-être une valeur » sans utiliser null. Vous l’utilisez avec match comme vos propres énumérations.
fn main() {
let maybe: Option<i32> = Some(5);
match maybe {
Some(n) => println!("got {}", n),
None => println!("nothing"),
}
}Assembler le tout
Ce programme complet modélise des températures, puis convertit une mesure en degrés Celsius en degrés Fahrenheit dans un match.
Essayez de modifier la variante ou sa valeur, puis de relancer le programme.
enum Temperature {
Celsius(f64),
Fahrenheit(f64),
}
fn main() {
let t = Temperature::Celsius(25.0);
let f = match t {
Temperature::Celsius(c) => c * 9.0 / 5.0 + 32.0,
Temperature::Fahrenheit(f) => f,
};
println!("{} F", f);
}Quand utiliser des variantes avec données
Utilisez des variantes contenant des données lorsque chaque cas s’accompagne naturellement d’informations supplémentaires.
- Un
Circlea besoin d’un rayon. - Un message
Writea besoin de son texte. - Un
Movea besoin de coordonnées.
Associer les données à la variante permet de garder les informations liées ensemble et de garantir leur sûreté par le système de types.
Vérification rapide
Vérifiez votre compréhension des énumérations contenant des données.
Récapitulatif
Vous avez appris que les variantes d’énumération peuvent contenir des données : une seule valeur, plusieurs valeurs, des champs nommés semblables à ceux d’une structure, ou aucune donnée.
Vous avez lu ces données en les nommant dans un motif match, comme Circle(r). Le type standard Option fonctionne de la même manière. Vous apprendrez ensuite à affiner les filtrages avec des gardes et des liaisons.
Questions Fréquemment Posées
La leçon « Énumérés avec données » est-elle gratuite ?
Oui — le texte complet de « Énumérés avec données » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Énumérés avec données » ?
Associez des valeurs aux variantes. Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?
Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Énumérés avec données » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?
Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir votre premier énuméré
- Faire correspondre les variantes d’un énuméré
- Énumérés avec données
- Gardes et liaisons de correspondance