Section courante

A propos

Section administrative du site

match

Correspondance
Rust

Syntaxe

match expression {
   motif1 [if condition1] => expression1,
   motif2 [if condition2] => expression2,
   ...
   _ => expression_par_défaut,
}

Paramètres

Nom Description
expression Ce paramètre permet de spécifier la valeur à évaluer et à faire correspondre à un ou plusieurs motifs.
motif Ce paramètre permet de définir un schéma de correspondance (comme une valeur, une structure, un enum,...).
condition Ce paramètre permet d'ajouter une garde conditionnelle pour affiner un motif (optionnel).
expression_n Ce paramètre permet de spécifier l'instruction ou la valeur à exécuter/retourner lorsque le motif est satisfait.
_ Ce paramètre permet d'indiquer un motif par défaut, utilisé lorsque aucun autre motif ne correspond.
=> Ce paramètre permet d'associer chaque motif (et éventuellement sa garde) à son bloc d'exécution.

Description

Ce mot réservé permet de faire correspondre une valeur à des motifs.

Remarques

Permet de contrôler le flux basé sur la correspondance de motifs.

match peut être utilisé pour exécuter du code de manière conditionnelle. Chaque motif doit être traité de manière exhaustive, soit explicitement, soit en utilisant des caractères génériques comme _ dans la correspondance. Puisque match est une expression, des valeurs peuvent également être renvoyées.

  1. let opt = Option::None::<usize>;
  2. let x = match opt {
  3.     Some(int) => int,
  4.     None => 10,
  5. };
  6. assert_eq!(x, 10);
  7.  
  8. let a_number = Option::Some(10);
  9. match a_number {
  10.     Some(x) if x <= 5 => println!("0 à 5 chiffres = {x}"),
  11.     Some(x @ 6..=10) => println!("6 à 10 nombres = {x}"),
  12.     None => panic!(),
  13.     // tous les autres numéros
  14.     _ => panic!(),
  15. }

match peut être utilisé pour accéder aux membres internes d'une énumération et les utiliser directement.

  1. enum Outer {
  2.     Double(Option<u8>, Option<String>),
  3.     Single(Option<u8>),
  4.     Empty
  5. }
  6.  
  7. let get_inner = Outer::Double(None, Some(String::new()));
  8. match get_inner {
  9.     Outer::Double(None, Some(st)) => println!("{st}"),
  10.     Outer::Single(opt) => println!("{opt:?}"),
  11.     _ => panic!(),
  12. }    


Dernière mise à jour : Vendredi, le 1er Août 2025