Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Annexe A : les mots-clés

Les listes suivantes contiennent des mots-clés réservés qui sont actuellement utilisés dans le langage Rust ou qui pourraient l’être à l’avenir. De ce fait, ils ne peuvent pas être utilisés comme identificateurs (sauf comme identificateurs bruts, ce que nous allons voir dans la section « les identificateurs bruts »). Les identificateurs sont les noms de fonctions, de variables, de paramètres, de champs de structures, de modules, de crates, de constantes, de macros, de valeurs statiques, d’attributs, de types, de traits ou de durées de vie.

Les mots-clés actuellement utilisés

Les mots-clés suivants ont actuellement la fonction décrite.

  • as : effectue une transformation de type primitive, précise le trait qui contient un élément ou renomme des éléments dans les instructions use.
  • async : retourné un Future plutôt que de bloquer la tâche en cours.
  • await : met en pause l’exécution jusqu’à ce que le résultat d’un Future soit disponible.
  • break : sort immédiatement d’une boucle.
  • const : définit des éléments constants ou des pointeurs bruts constants.
  • continue : passe directement à la prochaine itération de la boucle.
  • crate : dans un chemin de module, fait référence à la racine de la crate.
  • dyn : utilisation dynamique d’un objet trait.
  • else : une branche de repli pour les structures de contrôle de flux if et if let.
  • enum : définit une énumération.
  • extern : crée un lien vers une fonction ou une variable externe.
  • false : le littéral booléen qui vaut faux.
  • fn : définit une fonction ou le type pointeur de fonction.
  • for : crée une boucle sur les éléments d’un itérateur, implémente un trait ou renseigne une durée de vie de niveau supérieur.
  • if : une branche liée au résultat d’une expression conditionnelle.
  • impl : implémente des fonctionnalités propres à un élément ou à un trait.
  • in : fait partie de la syntaxe de la boucle for.
  • let : lie une variable.
  • loop : fait une boucle sans condition (théoriquement infinie).
  • match : compare une valeur à des motifs.
  • mod : définit un module.
  • move : fait en sorte qu’une fermeture prenne possession de tout ce qu’elle capture.
  • mut : autorise la mutabilité sur des références, des pointeurs bruts ou des éléments issus de motifs.
  • pub : autorise la visibilité publique sur des champs de structures, des blocs impl ou des modules.
  • ref : lie une valeur par référence.
  • return : retourné une valeur depuis une fonction.
  • Self : un alias de type pour le type que nous définissons ou implémentons.
  • self : désigne le sujet d’une méthode ou le module courant.
  • static : une variable globale ou une durée de vie qui persiste tout au long de l’exécution du programme.
  • struct : définit une structure.
  • super : le module parent du module courant.
  • trait : définit un trait.
  • true : le littéral booléen qui vaut vrai.
  • type : définit un alias de type ou un type associé.
  • union : définit une union ; n’est un mot-clé que lorsqu’il est utilisé dans la déclaration d’une union.
  • unsafe : autorise du code, des fonctions, des traits ou des implémentations non sécurisés.
  • use : importe des éléments dans la portée.
  • where : indique des conditions pour contraindre un type.
  • while : crée une boucle en fonction du résultat d’une expression.

Les mots-clés réservés pour une utilisation future

Les mots-clés suivants n’offrent actuellement aucune fonctionnalité mais sont réservés par Rust pour une potentielle utilisation future : - abstract - become - box - do - final - gen - macro - override - priv - try - typeof - unsized - virtual - yield

  • abstract
  • become
  • box
  • do
  • final
  • gen
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield

Les identificateurs bruts

Les identificateurs bruts sont une syntaxe qui vous permet d’utiliser des mots-clés là où ils ne devraient pas pouvoir l’être. Vous pouvez utiliser un identificateur brut en faisant précéder un mot-clé par r#.

Par exemple, match est un mot-clé. Si vous essayez de compiler la fonction suivante qui utilise match comme nom :

Fichier : src/main.rs rust {{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

… vous allez obtenir l’erreur suivante : text error: expected identifier, found keyword `match` --> src/main.rs:4:4 | 4 | fn match(needle: &str, haystack: &str) -> bool { | ^^^^^ expected identifier, found keyword

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | fn match(needle: &str, haystack: &str) -> bool {
  |    ^^^^^ expected identifier, found keyword

L’erreur montre que vous ne pouvez pas utiliser le mot-clé match comme identificateur de la fonction. Pour utiliser match comme nom de fonction, vous devez utiliser la syntaxe d’identificateur brut, comme ceci :

Fichier : src/main.rs rust {{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}

fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

fn main() {
    assert!(r#match("foo", "foobar"));
}

Ce code va se compiler sans erreur. Remarquez le préfixe r# sur le nom de la fonction dans sa définition mais aussi lorsque cette fonction est appelée dans main.

Les identificateurs bruts vous permettent d’utiliser n’importe quel mot de votre choix comme identificateur, même si ce mot est un mot-clé réservé. Cela nous donne plus de liberté pour choisir les noms des identificateurs, et nous permet aussi de nous intégrer avec des programmes écrits dans un langage où ces mots ne sont pas des mots-clés. De plus, les identificateurs bruts vous permettent d’utiliser des bibliothèques écrites dans des éditions de Rust différentes de celle qu’utilise votre crate. Par exemple, try n’est pas un mot-clé dans l’édition 2015, mais il l’est dans les éditions 2018, 2021 et 2024. Si vous dépendez d’une bibliothèque qui a été écrite avec l’édition 2015 et qui possède une fonction try, vous allez avoir besoin d’utiliser la syntaxe d’identificateur brut r#try dans ce cas, pour faire appel à cette fonction à partir de votre code dans les éditions ultérieures. Voir l’annexe E pour plus d’informations sur les éditions.