Écrire des fonctions en Rust

RustRustBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous apprenons à écrire des fonctions en Rust. Les fonctions sont déclarées à l'aide du mot clé fn, et leurs arguments sont annotés avec leur type. Le type de retour, le cas échéant, est spécifié après une flèche ->. La dernière expression dans la fonction sert de valeur de retour, mais l'instruction return peut être utilisée pour retourner une valeur plus tôt. Le laboratoire fournit un exemple de réécriture du programme FizzBuzz à l'aide de fonctions, démontrant l'utilisation de fonctions qui retournent des valeurs booléennes, de fonctions qui retournent le type unité (), et de fonctions sans type de retour spécifié.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.

Fonctions

Les fonctions sont déclarées à l'aide du mot clé fn. Ses arguments sont annotés avec leur type, tout comme les variables, et, si la fonction renvoie une valeur, le type de retour doit être spécifié après une flèche ->.

La dernière expression dans la fonction sera utilisée comme valeur de retour. Alternativement, l'instruction return peut être utilisée pour renvoyer une valeur plus tôt à l'intérieur de la fonction, même à l'intérieur de boucles ou d'instructions if.

Réécrivons FizzBuzz à l'aide de fonctions!

// Contrairement à C/C++, il n'y a pas de restriction sur l'ordre des définitions de fonctions
fn main() {
    // Nous pouvons utiliser cette fonction ici, et la définir plus tard quelque part
    fizzbuzz_to(100);
}

// Fonction qui renvoie une valeur booléenne
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Cas limité, retour anticipé
    if rhs == 0 {
        return false;
    }

    // Ceci est une expression, le mot clé `return` n'est pas nécessaire ici
    lhs % rhs == 0
}

// Fonctions qui "ne" renvoient pas de valeur, renvoient en fait le type unité `()`
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// Lorsqu'une fonction renvoie `()`, le type de retour peut être omis de la
// signature
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

Sommaire

Félicitations! Vous avez terminé le laboratoire sur les Fonctions. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.