8. Structures et enums
8. Structures et enums
Les structures et enums servent Ă exprimer des donnĂ©es avec intention. Le lecteur doit comprendre « ce que câest » avant de comprendre « ce que ça fait ».
Structures
Une structure regroupe des champs liés. Préférez des structures petites et cohérentes.
Exemple conceptuel :
struct Point {
x: i32
y: i32
}
Enums
Les enums expriment un choix fini. Ils sont utiles pour rendre les états explicites.
enum Status {
Ok
Err
}
ModĂ©liser lâintention
Un enum bien nommĂ© vous Ă©vite des dizaines de commentaires. Il dit clairement « voici toutes les options possibles ». Câest un outil de prĂ©cision, pas un gadget.
Pas de structures âfourreâtoutâ
Une structure qui finit par contenir « un peu de tout » devient vite un stockage sans intention. Quand vous sentez ce glissement, dĂ©coupezâla.
Champs dérivés
Ăvitez de stocker des champs qui peuvent ĂȘtre recalculĂ©s sans coĂ»t significatif. Cela rĂ©duit les risques dâincohĂ©rence. Une structure doit rester une vĂ©ritĂ© unique.
Ă retenir
Une structure est un nom pour un groupe dâinvariants. Une enum est un nom pour un choix fini. Si la syntaxe exacte change, conservez lâintention : donner un nom Ă un groupe stable.
Exemple guidé : refactorer une structure
Prenez une structure âfourreâtoutâ et dĂ©coupezâla en deux structures plus petites. Ajoutez un enum pour rendre les Ă©tats explicites.
Erreurs courantes
Stocker des champs dérivés. Utiliser des structures énormes pour éviter de réfléchir au modÚle. Mettre des valeurs optionnelles sans les signaler.
Checklist structures
Chaque champ a une raison dâĂȘtre. Les champs dĂ©rivĂ©s sont Ă©vitĂ©s. Les invariants sont documentĂ©s.
Exercice : structurer un état
Imaginez un downloader avec trois Ă©tats : âen attenteâ, âen coursâ, âterminĂ©â. Ăcrivez un enum pour ces Ă©tats, et Ă©vitez les drapeaux boolĂ©ens multiples.
Code complet (API actuelle)
form Config {
port: i32
host: string
}
pick State {
Idle
Running
Failed(code: i32)
}
API idéale (future)
Un support plus direct pour les âoptionnelsâ (champ nullable) sans Option explicite.