0Pricing
Learn Rust Coding · Leçon

pub et visibilité

Contrôler les accès

pub et visibilité est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.

Privé par défaut

Dans Rust, tout ce qui se trouve dans un module est privé par défaut. Les autres modules ne peuvent pas le voir, sauf si vous l’autorisez avec pub.

Cette valeur par défaut sûre masque les détails d’implémentation jusqu’à ce que vous décidiez de les exposer.

Fonctions pub

Marquer une fonction avec pub permet de l’appeler depuis l’extérieur de son module. Sans cela, l’appel échoue lors de la compilation.

mod math {
    pub fn square(x: i32) -> i32 {
        x * x
    }
}

fn main() {
    println!("{}", math::square(5));
}

Les auxiliaires privés restent masqués

Vous pouvez garder les fonctions auxiliaires internes privées tout en exposant une API publique. La fonction publique peut appeler la fonction privée, mais pas les utilisateurs externes.

mod math {
    fn double(x: i32) -> i32 { x * 2 }
    pub fn quadruple(x: i32) -> i32 { double(double(x)) }
}

fn main() {
    println!("{}", math::quadruple(3));
}

Les structures pub masquent leurs champs

Rendre une structure pub expose le type, mais ses champs restent privés, sauf si chacun est également marqué pub.

Vous pouvez ainsi contrôler la manière dont la structure est créée et modifiée.

mod model {
    pub struct User {
        pub name: String,
        age: u32,
    }
    impl User {
        pub fn new(name: String, age: u32) -> User {
            User { name, age }
        }
        pub fn age(&self) -> u32 { self.age }
    }
}

fn main() {
    let u = model::User::new(String::from("Sam"), 28);
    println!("{} is {}", u.name, u.age());
}

Pourquoi masquer les champs ?

Les champs privés garantissent les invariants. Les appelants doivent utiliser votre constructeur et vos méthodes ; vous pouvez ainsi valider les entrées et modifier ultérieurement la structure interne sans interrompre les utilisateurs.

Les énumérations pub exposent tout

Contrairement aux structures, une énumération pub rend automatiquement publiques toutes ses variantes. Les variantes n’ont pas de visibilité distincte.

mod traffic {
    pub enum Light {
        Red,
        Yellow,
        Green,
    }
}

fn main() {
    let l = traffic::Light::Green;
    let go = matches!(l, traffic::Light::Green);
    println!("go = {}", go);
}

pub(crate) : à l’échelle de la caisse

pub(crate) rend un élément visible partout dans la même caisse, mais pas dans les caisses externes qui dépendent de la vôtre.

C’est idéal pour les API internes partagées entre modules.

mod config {
    pub(crate) fn default_port() -> u16 {
        8080
    }
}

fn main() {
    println!("{}", config::default_port());
}

pub(super) : réservé au parent

pub(super) expose un élément uniquement au module parent. C’est une autorisation plus limitée que pub.

mod outer {
    pub fn run() {
        inner::helper();
    }
    mod inner {
        pub(super) fn helper() {
            println!("visible to parent only");
        }
    }
}

fn main() {
    outer::run();
}

Réexporter avec pub use

pub use réexporte un élément, ce qui permet aux appelants d’y accéder par un chemin plus court ou plus pratique. Cela contribue à créer une API publique claire.

mod deep {
    pub mod nested {
        pub fn ping() {
            println!("pong");
        }
    }
    pub use nested::ping;
}

fn main() {
    deep::ping();
}

Concevoir une API publique

Exposez la plus petite interface permettant d’accomplir la tâche. Gardez les fonctions auxiliaires privées, masquez les champs des structures derrière des méthodes et utilisez pub(crate) pour le partage interne.

Une API concise évolue plus facilement sans interrompre les utilisateurs.

Résumé des niveaux de visibilité

Du plus restrictif au moins restrictif :

  • par défaut (privé pour le module)
  • pub(super) — visible par le parent
  • pub(crate) — visible dans toute la caisse
  • pub — visible partout

Vérification rapide

Testez votre compréhension de la visibilité.

Récapitulatif

Vous avez appris à contrôler les accès :

  • Les éléments sont privés par défaut ; pub les expose
  • Les structures pub gardent leurs champs privés, sauf si chacun est pub
  • Les énumérations pub exposent toutes leurs variantes
  • pub(crate) et pub(super) offrent un contrôle plus précis
  • pub use réexporte des éléments pour créer une API claire

Questions Fréquemment Posées

La leçon « pub et visibilité » est-elle gratuite ?

Oui — le texte complet de « pub et visibilité » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « pub et visibilité » ?

Contrôler les accès Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?

Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « pub et visibilité » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?

Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Modules et mod
  2. pub et visibilité
  3. use et chemins
  4. Crates et racine de crate
← Retour à Learn Rust Coding