Les structures comme paramètres de fonction
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 24 sur 66.
Maintenant que vous savez comment créer et modifier des structures, explorons comment les utiliser avec des fonctions. Tout comme n'importe quel autre type de données en Rust, vous pouvez passer des instances de structures à des fonctions et les retourner à partir de fonctions.
Pour passer une structure à une fonction, il suffit de l'inclure comme paramètre dans la définition de la fonction :
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Cette fonction prend une structure Rectangle en tant que paramètre et retourne un i32. À l'intérieur de la fonction, vous pouvez accéder aux champs de la structure en utilisant la notation par point, tout comme vous le feriez n'importe où ailleurs.
Vous pouvez également retourner des structures à partir de fonctions en spécifiant le type de structure comme type de retour :
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}L'utilisation de structures avec des fonctions rend votre code plus organisé et significatif. Au lieu de passer plusieurs paramètres individuels, vous pouvez regrouper les données associées et les transmettre comme une seule unité bien définie.
Défi
FacileVous recevrez quatre entrées : la largeur d'un rectangle (sous forme d'entier), la hauteur d'un rectangle (sous forme d'entier), la longueur du côté d'un carré (sous forme d'entier) et un numéro de choix (1 ou 2). Définissez une structure Rectangle avec deux champs : width: i32 et height: i32. Créez deux fonctions : une qui prend un Rectangle et calcule son aire, et une autre qui prend une longueur de côté et retourne un Rectangle représentant un carré. En fonction de l'entrée de choix, calculez et affichez l'aire appropriée.
Exigences :
- Définir une structure
Rectangleavec les champs :width: i32etheight: i32 - Créer une fonction
calculate_areaqui prend unRectangleen paramètre et retourne uni32(l'aire) - Créer une fonction
create_squarequi prend uni32(longueur du côté) en paramètre et retourne unRectangleavec une largeur et une hauteur égales - Lire la première entrée et la convertir en
i32pour la largeur du rectangle - Lire la deuxième entrée et la convertir en
i32pour la hauteur du rectangle - Créer une instance de
Rectangleavec ces dimensions - Lire la troisième entrée et la convertir en
i32pour la longueur du côté du carré - Lire la quatrième entrée et la convertir en
i32pour le choix (1 ou 2) - Si le choix est 1 : calculer et afficher l'aire du rectangle
- Si le choix est 2 : créer un carré en utilisant
create_square, puis calculer et afficher son aire
Entrée :
- Première ligne : Largeur du rectangle sous forme d'entier (par ex.,
8) - Deuxième ligne : Hauteur du rectangle sous forme d'entier (par ex.,
5) - Troisième ligne : Longueur du côté du carré sous forme d'entier (par ex.,
6) - Quatrième ligne : Choix sous forme d'entier, soit 1 ou 2 (par ex.,
1)
Sortie :
- Si le choix est 1 :
Rectangle area: [area] - Si le choix est 2 :
Square area: [area]
Aide-mémoire
Les structures peuvent être passées aux fonctions en tant que paramètres et retournées par les fonctions.
Pour passer une structure à une fonction, incluez-la en tant que paramètre :
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Pour retourner une structure depuis une fonction, spécifiez le type de la structure comme type de retour :
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}À l'intérieur des fonctions, accédez aux champs de la structure en utilisant la notation par point. L'utilisation de structures avec des fonctions vous permet de regrouper des données liées ensemble au lieu de passer plusieurs paramètres individuels.
Essayez vous-même
use std::io;
// TODO: Définir la structure Rectangle ici
// TODO: Définir la fonction calculate_area ici
// TODO: Définir la fonction create_square ici
fn main() {
// Lire la largeur du rectangle
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// Lire la hauteur du rectangle
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// Lire la longueur du côté du carré
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// Lire le choix
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: Écrire votre code ci-dessous
// Créer une instance de Rectangle, vérifier le choix, et calculer l'aire appropriée
// Afficher le résultat en fonction du choix
// Utiliser : println!("Rectangle area: {}", area); ou println!("Square area: {}", area);
}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
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final