Book · Chapter 11

9. Modules, use, pull, share

9. Modules, use, pull, share

Un module est une frontiĂšre : ce qui est dedans est stable, ce qui est dehors est protĂ©gĂ© par l’interface. En pratique, c’est le meilleur outil pour garder un projet lisible.

Charger un module

use std/cli

Vous importez ce dont vous avez besoin, rien de plus. Ce geste devrait toujours ĂȘtre intentionnel : on ne « tire » pas un module pour voir si ça marche.

Pull et partage

pull sert Ă  importer du code local. share expose ce que vous voulez rendre public. Cette sĂ©paration force l’intention et limite les dĂ©pendances accidentelles.

Choisir une architecture

Un module par responsabilité. Des noms courts, alignés sur le domaine. Une hiérarchie stable qui facilite la navigation.

Interfaces fines

Une interface trop large invite les usages inattendus. Préférez une interface petite, lisible, et bien documentée. Un module qui fait peu, mais qui le fait bien, est une excellente brique.

Dépendances explicites

Une dĂ©pendance implicite devient un bug implicite. Rendez vos dĂ©pendances visibles, et limitez‑les. C’est le meilleur moyen de garder un code portable.

À retenir

La modularité est votre meilleure défense contre les dépendances confuses.

Exemple guidé : scinder un module

Prenez un module qui gĂšre Ă  la fois I/O et parsing. Scindez‑le en deux modules. Vous verrez immĂ©diatement les bĂ©nĂ©fices en lisibilitĂ©.

Erreurs courantes

Importer un module “par habitude”. Exposer trop de symboles publics. CrĂ©er une hiĂ©rarchie trop profonde.

Checklist modules

Un module = une responsabilité. Les interfaces publiques sont petites. Les dépendances sont visibles.

Exercice : modulariser un script

Prenez un script monolithique. DĂ©placez la logique d’I/O dans un module, et la logique mĂ©tier dans un autre. Mesurez la diffĂ©rence de lisibilitĂ©.

Code complet (API actuelle)

use std/cli
use std/io/print

entry main at core/app {
  let args = args()
  if has_flag(args, "--help") {
    println_or_panic("help")
  }
  give 0
}

API idéale (future)

Un systĂšme de modules avec alias et reexports plus explicites pour les grands projets.