Modules et visibilité

Ces exercices portent sur les modules (mod), la visibilité (pub), les chemins (crate::, super::), les sous-modules et les modules en ligne. Faites-les dans l'ordre.

Découper en modules

On te donne un petit programme où sont mélangées, dans main.rs, les fonctions aire_rectangle, perimetre_rectangle, km_en_miles et miles_en_km. Réorganise-le en deux modules-fichiers, geometrie et conversions, en ne mettant en pub que l'API utile.

  • Objectif : mod nom; + fichier, pub fn, chemins geometrie::aire_rectangle(...).
  • Signature suggérée : -
  • Cas de test : main peut appeler geometrie::aire_rectangle(3.0, 4.0) -> 12.0 et conversions::km_en_miles(10.0) -> environ 6.21.

Module en ligne

Définir, directement dans main.rs, mod maths { ... } contenant une fonction publique carre(x: i64) -> i64 et une fonction privée utilisée en interne. Appeler carre depuis main.

  • Objectif : mod nom { ... }, visibilité privée par défaut.
  • Signature suggérée : mod maths { pub fn carre(x: i64) -> i64 { /* ... */ } }.
  • Cas de test : maths::carre(5) -> 25 ; appeler la fonction privée depuis main doit provoquer une erreur de compilation.

Corriger la visibilité

On te donne un module formes avec struct Point { x: f64, y: f64 } et une fonction, tous privés. Le main ne compile pas. Ajoute les pub nécessaires (sur le type, sur ses champs, sur la fonction) pour que ça compile.

  • Objectif : comprendre que pub struct ne rend pas les champs publics.
  • Signature suggérée : -
  • Cas de test : main peut écrire formes::Point { x: 1.0, y: 2.0 } et appeler la fonction.

Sous-module et pub use

Créer banque::comptes::Compte (dans banque/comptes.rs ou en ligne). Ajouter dans banque un pub use comptes::Compte; pour pouvoir écrire banque::Compte depuis l'extérieur.

  • Objectif : sous-modules, ré-export avec pub use.
  • Signature suggérée : -
  • Cas de test : main accède au type via banque::Compte et via banque::comptes::Compte.