Rust Odyssey

Leçons
Login Rejoindre

x

Chapitre 4

Abstractions de niveau 1

2. Traits

Définition

Un trait est une façon de définir un ensemble de comportements (fonctions) qu’un type peut implémenter.

Imaginons qu’on veuille créer un trait Figure2D qui va regrouper tous les comportements que doit posséder une figure en 2D, à savoir calculer son aire et son périmètre.

On va ensuite pouvoir implémenter ce trait pour différents types comme Circle ou Rectangle.

Comme chacun de ses types calcul son aire et son périmètre de façon différente ils vont pouvoir définir la méthode area et perimeter chacun de leur côté au moment de l’implémentation du trait.

De cette façon on sait que Circle et Retangle auront les méthodes area et perimeter.

struct Circle {
    radius: f64,
}

struct Rectangle {
    width: f64,
    height: f64,
}

trait Figure2D {
    fn area(&self) -> f64;
    fn perimeter(&self) -> f64;
}

impl Figure2D for Circle {
    fn area(&self) -> f64 {
        std::f64::consts::PI * self.radius * self.radius
    }

    fn perimeter(&self) -> f64 {
        2.0 * std::f64::consts::PI * self.radius
    }
}

impl Figure2D for Rectangle {
    fn area(&self) -> f64 {
        self.width * self.height
    }

    fn perimeter(&self) -> f64 {
        2.0 * (self.width + self.height)
    }
}


fn main() {
    let c = Circle { radius: 3.0 };
    let r = Rectangle { width: 4.0, height: 5.0 };

    dbg!(c.area());
    dbg!(r.area());
}

Tu veux en apprendre plus ? 👋

C'est la fin de la partie gratuite... 😔

Accède à l’intégralité de la formation, à un Discord francophone actif, à des résumés écrits et à toutes les futures mises à jour pour seulement 95€ !

Login Rejoindre