« Rust: enums » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
(Page créée avec «  <nowiki> // Un enum prend plusieurs types prédéfinis // chaque instance de cet enum devra choisir dans une de ces valeurs enum IpAddrKind { V4, V6 } //On peut aussi attacher des données enum IpAddr { V4(String), V6(String) } //Voire les utiliser dans des structs struct Address { kind: IpAddrKind, address: String } //Un enum peut contenir tout type de data //et avoir des variantes sur le même modèle qu'un struct, //l'avantage étan... »)
 
Aucun résumé des modifications
 
(Une version intermédiaire par la même utilisatrice non affichée)
Ligne 1 : Ligne 1 :
<nowiki>
<syntaxhighlight lang='rust'>
// Un enum prend plusieurs types prédéfinis
// Un enum prend plusieurs types prédéfinis
// chaque instance de cet enum devra choisir dans une de ces valeurs
// chaque instance de cet enum devra choisir dans une de ces valeurs
Ligne 51 : Ligne 51 :
//D'ailleurs, la lib standard implémente une définition pour les adresses IP
//D'ailleurs, la lib standard implémente une définition pour les adresses IP
//sur ce modèle
//sur ce modèle
</nowiki>
</syntaxhighlight>

Dernière version du 3 novembre 2022 à 09:18

<syntaxhighlight lang='rust'> // Un enum prend plusieurs types prédéfinis // chaque instance de cet enum devra choisir dans une de ces valeurs enum IpAddrKind {

   V4,
   V6

}

//On peut aussi attacher des données enum IpAddr {

   V4(String),
   V6(String)

}

//Voire les utiliser dans des structs struct Address {

   kind: IpAddrKind,
   address: String

}

//Un enum peut contenir tout type de data //et avoir des variantes sur le même modèle qu'un struct, //l'avantage étant que c'est dans un seul objet enum TresVarie {

   RienDuTout,
   DesChampsNommes {x: i32, y: i32},
   UnString(String),
   UnTuple(i32, i32)

}

//Et un enum peut aussi avoir des méthodes impl Address {

   fn print_add(&self) {
       println!("{}", self.address);
   }

}

fn main() {

   //L'instanciation se fait sur le principe de namespace...
   let home_add = IpAddr::V4(String::from("1.2.3.4"));
   let whatever = IpAddr::V6;
   let dns_add = Address {
       kind: IpAddrKind::V4,
       address: String::from("1.1.1.1")
   };
   dns_add.print_add()

}

//D'ailleurs, la lib standard implémente une définition pour les adresses IP //sur ce modèle </syntaxhighlight>