Book · Chapter 10

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.