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, cheminsgeometrie::aire_rectangle(...). - Signature suggérée : -
- Cas de test :
mainpeut appelergeometrie::aire_rectangle(3.0, 4.0)->12.0etconversions::km_en_miles(10.0)-> environ6.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 depuismaindoit 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 structne rend pas les champs publics. - Signature suggérée : -
- Cas de test :
mainpeut écrireformes::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 :
mainaccède au type viabanque::Compteet viabanque::comptes::Compte.