Rust : Structs
Aller à la navigation
Aller à la recherche
<source lang='rust'> //Récupérer le trait debug...
- [derive(Debug)]
//Mon struct rectangle avec ses attributs struct Rectangle {
w: u32, h: u32
}
//L'implémentation du rectangle, avec ses méthodes //ce sont des méthodes parce qu'elles ont &self en paramètre //sans ça c'est des "associated functions" impl Rectangle {
fn area(&self) -> u32 {
self.w * self.h
}
fn can_hold(&self, other_rect: &Rectangle) -> bool {
if other_rect.area() <= self.area() {
return true;
} else {
return false;
}
}
fn w(&self) -> String {
let ret_str = String::from("You called the w method. Rust is weird.");
return ret_str;
}
}
//On peut avoir plusieurs blocs impl si on veut impl Rectangle {
//Ici, une fonction associée
//C'est un constructeur, elle me sert à construire un carré en l'occurence
//Self est un alias pour le type qui est marqué derrière impl, donc ici
//Rectangle
fn square(size: u32) -> Self {
Self {
w: size,
h: size
}
}
}
//On a plusieurs types de structs...
//Un unit struct, vide, au même titre qu'un unit tuple ()
struct Unitaire;
//
//Le struct classique donc
struct PlutotNormal {
x: i32, y: u32
} // //Et le tuple Struct struct UnSeulTruc(String); struct PlusieursTrucs(i32, i32, i32);
fn main() {
let rect1 = Rectangle {
w: 500,
h: 1000
};
let rect2 = Rectangle {
w: 400,
h: 1000
};
//Debug en pretty-print
//{:?} signifie debug, soit afficher la variable telle qu'écrite dans le code
//{:#?} Pareil mais en plus joli
//Il existe la macro dbg! qui fait la même chose
//...cependant l'objet doit avoir le trait debug
println!("Mon rectangle : {:#?}", rect1);
//Utiliser la méthode
println!("Area : {}", rect1.area());
if rect1.can_hold(&rect2) {
println!("Rect1 est plus grand que rect2");
}
//Une méthode de struct peut avoir le même nom qu'un des attributs
//Ce sont alors les parenthèses qui font la diff.
println!("rect1.w => {}", rect1.w);
println!("rect1.w() => {}", rect1.w());
//Utiliser mon constructeur de carré let moncarre = Rectangle::square(200); dbg!(moncarre);
}
</source>