Section courante

A propos

Section administrative du site

impl

Implémentation
Rust

Syntaxe

impl nomdelaclasse {
   definition
}

Paramètres

Nom Description
nomdelaclasse Ce paramètre permet de spécifier le nom de la structure, de l'énumération ou du trait à implémenter.
definition Ce paramètre permet de définir les fonctions, méthodes ou constantes associées au type implémenté.

Description

Ce mot réservé permet de mettre en oeuvre une fonctionnalité inhérente ou caractéristique.

Remarques

Implémentations de fonctionnalités pour un type, ou type implémentant une fonctionnalité.

Le mot clef impl a deux utilisations :

Implémentation de fonctionnalités pour un type

Le mot clef impl sert principalement à définir des implémentations de types. Les implémentations inhérentes sont autonomes, tandis que les implémentations de traits servent à implémenter des traits pour les types, ou d'autres traits.

Une implémentation se compose de définitions de fonctions et de constantes. Une fonction définie dans un bloc impl peut être autonome, ce qui signifie qu'elle sera appelée comme Vec::new(). Si la fonction prend self, &self ou &mut self comme premier paramètre, elle peut également être appelée en utilisant la syntaxe d'appel de méthode, une fonctionnalité familière à tout programmeur orienté objet, comme vec.len().

Implémentations inhérentes

  1. struct Example {
  2.     number: i32,
  3. }
  4.  
  5. impl Example {
  6.     fn boo() {
  7.         println!("boo! Exemple::boo() a été appelé!");
  8.     }
  9.  
  10.     fn answer(&mut self) {
  11.         self.number += 42;
  12.     }
  13.  
  14.     fn get_number(&self) -> i32 {
  15.         self.number
  16.     }
  17. }

Peu importe où une implémentation inhérente est définie ; sa fonctionnalité est concernée quel que soit le type d'implémentation.

Implémentations de Trait

  1. struct Example {
  2.     number: i32,
  3. }
  4.  
  5. trait Thingy {
  6.     fn do_thingy(&self);
  7. }
  8.  
  9. impl Thingy for Example {
  10.     fn do_thingy(&self) {
  11.         println!("faire une chose ! aussi, le nombre est {}!", self.number);
  12.     }
  13. }

Peu importe où l'implémentation d'un trait est définie ; ses fonctionnalités peuvent être intégrées dans la portée en important le trait qu'il implémente.

Désignation d'un type implémentant une fonctionnalité

Le mot clef impl est également utilisé dans la syntaxe impl Trait, pouvant être interprétée comme « tout type concret implémentant un trait». Il peut être utilisé comme type de déclaration de variable, en position d'argument ou en position de retour. Un cas d'utilisation pertinent est l'utilisation de fermetures, dont les types sont innommables.

  1. fn thing_returning_closure() -> impl Fn(i32) -> bool {
  2.     println!("voici une fermeture pour vous !");
  3.     |x: i32| x % 3 == 0
  4. }    


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