Menu
Coddy logo textTech

Aperçu des structures

Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 21 sur 66.

Maintenant que vous comprenez ce que sont les structs, apprenons comment les créer et les utiliser concrètement. Cela implique deux étapes : d'abord définir la structure de la struct, puis en créer des instances.

Pour définir une struct, vous utilisez le mot-clé struct suivi du nom de la struct et de ses champs à l'intérieur d'accolades. Chaque champ a un nom et un type :

struct User {
    username: String,
    active: bool,
}

Cela crée un modèle pour une struct User avec deux champs : username de type String et active de type bool.


Les noms de struct en Rust suivent le PascalCase (également appelé CamelCase) — chaque mot commence par une majuscule, sans tirets bas. Par exemple : User, BlogPost, GamePlayer.

Une fois que vous avez défini une structure, vous pouvez en créer des instances en spécifiant des valeurs pour chaque champ :

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Remarquez que vous fournissez le nom de la structure suivi d'accolades contenant chaque nom de champ, deux-points, et sa valeur. L'ordre des champs n'a pas besoin de correspondre à l'ordre de définition.

Pour accéder à la valeur d'un champ à partir d'une instance de structure, utilisez la notation par point — le nom de l'instance suivi d'un point et du nom du champ :

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

Vous pouvez également mettre à jour la valeur d'un champ en utilisant la notation par point, à condition que l'instance soit déclarée avec let mut :

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

Défi

Facile

Vous recevrez trois entrées : un nom de produit, un prix (sous forme de nombre décimal) et une quantité en stock (sous forme d'entier). Définissez une structure Product avec trois champs : name de type String, price de type f64, et stock de type i32. Ensuite, créez une instance de cette structure en utilisant les valeurs d'entrée et affichez les informations du produit.

Exigences :

  • Définir une structure Product avec les champs : name: String, price: f64, et stock: i32
  • Lire la première entrée comme étant le nom du produit
  • Lire la deuxième entrée et la convertir en f64 pour le prix
  • Lire la troisième entrée et la convertir en i32 pour la quantité en stock
  • Créer une instance de la structure Product avec ces valeurs
  • Afficher les informations du produit exactement selon le format indiqué ci-dessous

Entrée :

  • Première ligne : Nom du produit (par ex., Laptop)
  • Deuxième ligne : Prix sous forme de nombre décimal (par ex., 999.99)
  • Troisième ligne : Quantité en stock sous forme d'entier (par ex., 15)

Sortie :

  • Première ligne : Product: [name]
  • Deuxième ligne : Price: $[price]
  • Troisième ligne : Stock: [quantity]

Aide-mémoire

Les noms de structures utilisent le PascalCase (par exemple, UserAccount). Pour définir une structure, utilisez le mot-clé struct suivi du nom de la structure et de ses champs à l'intérieur d'accolades :

struct User {
    username: String,
    active: bool,
}

Chaque champ possède un nom et un type.

Pour créer une instance d'une structure, spécifiez les valeurs pour chaque champ :

let user1 = User {
    username: String::from("alice"),
    active: true,
};

L'ordre des champs dans l'instance ne doit pas nécessairement correspondre à l'ordre de définition.

Pour accéder à un champ, utilisez la notation par point — le nom de l'instance suivi d'un point et du nom du champ :

println!("{}", user1.username); // prints: alice
println!("{}", user1.active);   // prints: true

Essayez vous-même

use std::io;

// TODO : Définissez votre structure Product ici


fn main() {
    // Lire le nom du produit
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Lire le prix
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Lire la quantité en stock
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO : Créer une instance de la structure Product en utilisant les valeurs saisies
    
    
    // TODO : Afficher les informations du produit dans le format requis
    
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow