Menu
Coddy logo textTech

Aide-mémoire Rust

Dernière mise à jour

Hello World et structure

Un programme Rust démarre à fn main ; les instructions se terminent par des points-virgules.

OpérationSyntaxe
Point d'entréefn main() { ... }
Afficher une ligneprintln!("Hello, World!");
Afficher avec des valeursprintln!("{} is {}", name, age);
Afficher la forme debugprintln!("{:?}", value);
Commentaire de ligne// comment
Utiliser un élément d'un moduleuse std::collections::HashMap;
Construire et exécutercargo run
Construire un binaire de releasecargo build --release

Variables et types (let / mut)

Les liaisons sont immuables par défaut ; ajoutez mut pour autoriser la réaffectation.

OpérationSyntaxe
Liaison immuablelet x = 5;
Liaison mutablelet mut count = 0;
Type explicitelet age: u32 = 30;
Constanteconst MAX: u32 = 100;
Masquage (shadowing)let x = x + 1;
Types entiersi32, u32, i64, usize
Autres scalairesf64, bool, char
Tuplelet pair: (i32, &str) = (1, "a");
Conversion de typelet f = x as f64;

Contrôle de flux

if est une expression, et Rust possède trois formes de boucle.

OpérationSyntaxe
If / elseif x > 0 { ... } else { ... }
If en tant qu'expressionlet y = if x > 0 { 1 } else { -1 };
Boucle infinieloop { ... }
Boucle renvoyant une valeurlet v = loop { break 5; };
Boucle whilewhile x < 100 { ... }
For sur une plagefor i in 0..10 { ... }
For sur une collectionfor item in &items { ... }
Break / continuebreak;, continue;

Fonctions

La dernière expression (sans point-virgule) est la valeur de retour.

OpérationSyntaxe
Fonction de basefn add(a: i32, b: i32) -> i32 { a + b }
Retour explicitefn f() -> i32 { return 5; }
Sans valeur de retourfn log(msg: &str) { ... }
Prendre une référencefn len(s: &String) -> usize { s.len() }
Fermeturelet add = |a, b| a + b;
Fermeture avec typelet sq = |x: i32| -> i32 { x * x };
Fonction en argumentfn apply(f: impl Fn(i32) -> i32) { ... }

Ownership et emprunt

Chaque valeur a un seul propriétaire ; les références l'empruntent sans en prendre possession.

OpérationSyntaxe
Déplacement (transfert de propriété)let b = a; (a n'est plus valide)
Clone (copie profonde)let b = a.clone();
Emprunt immuablelet r = &x;
Emprunt mutablelet r = &mut x;
Emprunt dans une fonctionfn read(s: &String) { ... }
Déréférencement*r
Règle d'empruntPlusieurs & OU un seul &mut à la fois, pas les deux
Slice (emprunte une plage)let part = &arr[1..3];

Structures et enums

Les structures regroupent des données liées ; les enums modélisent une valeur qui est l'une de plusieurs variantes.

OpérationSyntaxe
Définir une structurestruct Point { x: i32, y: i32 }
Créer une instancelet p = Point { x: 1, y: 2 };
Accéder à un champp.x
Structure tuplestruct Pair(i32, i32);
Méthode (bloc impl)impl Point { fn dist(&self) -> f64 { ... } }
Fonction associéeimpl Point { fn new() -> Self { ... } }
Définir un enumenum Shape { Circle(f64), Rect(f64, f64) }
Enum avec champs nommésenum Msg { Move { x: i32, y: i32 } }
Dériver des traits#[derive(Debug, Clone)]

Filtrage par motif (match)

match compare une valeur à des motifs et doit être exhaustif.

OpérationSyntaxe
Filtrer sur des valeursmatch x { 1 => "one", _ => "other" }
Filtrer un enummatch shape { Shape::Circle(r) => ... }
Filtrer une plagematch n { 1..=5 => ..., _ => ... }
Lier avec une gardematch x { n if n > 0 => ... }
Filtrer un tuplematch point { (0, y) => ..., (x, _) => ... }
if let (motif unique)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
Déstructurer une structurelet Point { x, y } = p;

Traits et génériques

Les traits définissent un comportement partagé ; les génériques font fonctionner le code sur de nombreux types.

OpérationSyntaxe
Définir un traittrait Area { fn area(&self) -> f64; }
Implémenter un traitimpl Area for Circle { fn area(&self) -> f64 { ... } }
Méthode par défauttrait Greet { fn hi(&self) { ... } }
Fonction génériquefn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
Structure génériquestruct Wrapper<T> { value: T }
Contrainte de trait (where)fn f<T>(x: T) where T: Display { ... }
Argument impl Traitfn print(item: impl Display) { ... }
Objet traitlet shapes: Vec<Box<dyn Area>> = ...;

Gestion des erreurs (Result / Option)

Rust modélise l'absence avec Option et les erreurs récupérables avec Result.

OpérationSyntaxe
Valeur optionnelleOption<T> : Some(v) ou None
Type ResultResult<T, E> : Ok(v) ou Err(e)
Renvoyer un Resultfn read() -> Result<String, Error> { ... }
Propager avec ?let data = read()?;
Unwrap (panique sur None/Err)opt.unwrap()
Valeur par défautopt.unwrap_or(0)
Mapper une valeuropt.map(|v| v + 1)
Gérer les deux branchesmatch res { Ok(v) => ..., Err(e) => ... }
Convertir Option en Resultopt.ok_or("missing")?

Collections courantes (Vec / HashMap)

Vec est un tableau extensible ; HashMap est un magasin clé-valeur.

OpérationSyntaxe
Créer un vecteurlet mut v: Vec<i32> = Vec::new();
Littéral de vecteurlet v = vec![1, 2, 3];
Push / popv.push(4);, v.pop();
Accès par indicev[0]
Accès sûrv.get(0) renvoie Option<&T>
Itérerfor x in &v { ... }
Longueurv.len()
Créer une maplet mut m: HashMap<String, i32> = HashMap::new();
Insérer / obtenirm.insert(k, v);, m.get(&k)
API Entry*m.entry(k).or_insert(0) += 1;

La syntaxe Rust que vous utilisez le plus, sur une seule page. Cet aide-mémoire Rust est une référence rapide pour le cœur du langage - variables et mutabilité, ownership et emprunt, structures et enums, filtrage par motif, traits et génériques, ainsi que les types Result et Option qui sous-tendent la gestion des erreurs de Rust.

Tout ce qui figure ici est du Rust standard qui compile sur une chaîne d'outils stable récente. Copiez ce dont vous avez besoin, ou essayez chaque extrait en direct dans le playground Rust - aucune installation de cargo requise.

FAQ de l'aide-mémoire Rust

Cet aide-mémoire Rust est-il gratuit ?
Oui. Cet aide-mémoire Rust est entièrement gratuit, sans inscription. Mettez-le en favori et revenez dès que vous devez retrouver un motif de match, une contrainte de trait ou une méthode de collection.
Que sont l'ownership et l'emprunt en Rust ?
L'ownership est le modèle de mémoire de Rust : chaque valeur a exactement un propriétaire, et la valeur est libérée quand ce propriétaire sort de portée. L'emprunt vous permet d'accéder à une valeur sans en prendre possession au moyen d'une référence - &x pour un emprunt immuable ou &mut x pour un emprunt mutable. Le compilateur impose une règle : vous pouvez avoir plusieurs emprunts immuables ou exactement un emprunt mutable à la fois, ce qui empêche les accès concurrents au moment de la compilation.
Quelle est la différence entre Result et Option en Rust ?
Option<T> représente une valeur qui peut être absente - c'est soit Some(v), soit None, et vous l'utilisez lorsqu'il n'y a aucune erreur à signaler, juste une valeur manquante. Result<T, E> représente une opération qui peut échouer - c'est soit Ok(v), soit Err(e), portant une valeur d'erreur quand quelque chose tourne mal. Utilisez Option pour « peut-être présent » et Result pour « cela peut échouer » ; l'opérateur ? propage les deux.
Puis-je m'entraîner à Rust en ligne ?
Oui. Ouvrez le playground Rust pour compiler et exécuter n'importe quel extrait de cet aide-mémoire dans votre navigateur - aucun cargo ni chaîne d'outils à installer. Quand vous voulez de la structure, le cours Rust interactif gratuit de Coddy vous emmène des variables et de l'ownership jusqu'aux traits et à la gestion des erreurs, étape par étape.
Cet aide-mémoire convient-il aux débutants ?
Oui. Il est organisé des sujets les plus courants (variables, contrôle de flux, fonctions) jusqu'aux plus avancés (traits, génériques, gestion des erreurs), pour que vous puissiez utiliser les premières sections dès le premier jour et progresser vers l'ownership et le reste.
Coddy programming languages illustration

Apprenez Rust avec Coddy

COMMENCER