0Pricing
Learn Rust Coding · Lezione

pub e visibilità

Controllo degli accessi

pub e visibilità è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.

Privato per impostazione predefinita

In Rust, tutto ciò che si trova all'interno di un modulo è privato per impostazione predefinita. Gli altri moduli non possono accedervi, a meno che non lo si renda esplicitamente pubblico con pub.

Questa impostazione predefinita sicura mantiene nascosti i dettagli dell'implementazione finché non decide deliberatamente di esporli.

Funzioni pub

Contrassegnare una funzione con pub la rende chiamabile dall'esterno del proprio modulo. In sua assenza, la chiamata non viene compilata.

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

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

Gli helper privati rimangono nascosti

Può mantenere privati gli helper interni esponendo al contempo un'API pubblica. La funzione pubblica può chiamare quella privata, ma gli utenti esterni no.

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

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

Le struct pub nascondono i campi

Rendere una struct pub espone il tipo, ma i suoi campi rimangono privati a meno che ciascuno non sia contrassegnato anch'esso con pub.

Questo consente di controllare come la struct viene creata e modificata.

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());
}

Perché nascondere i campi?

I campi privati impongono gli invarianti. Chi chiama il codice deve usare il costruttore e i metodi forniti, consentendo così di convalidare gli input e modificare in seguito la struttura interna senza interrompere il funzionamento per gli utenti.

Gli enum pub espongono tutto

A differenza delle struct, un enum pub rende automaticamente pubbliche tutte le sue varianti. Le varianti non hanno una visibilità separata.

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): visibile nell'intero crate

pub(crate) rende un elemento visibile ovunque nello stesso crate, ma non ai crate esterni che dipendono dal Suo.

È perfetto per le API interne condivise tra più moduli.

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

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

pub(super): solo al genitore

pub(super) espone un elemento soltanto al modulo genitore. È un livello di visibilità più ristretto rispetto a pub.

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

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

Riesportare con pub use

pub use riesporta un elemento, permettendo ai chiamanti di raggiungerlo tramite un percorso più breve o pratico. In questo modo si definisce un'API pubblica pulita.

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

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

Progettare un'API pubblica

Esponga la superficie minima necessaria per svolgere il lavoro. Mantenga private le funzioni di supporto, nasconda i campi delle struct dietro i metodi e utilizzi pub(crate) per la condivisione interna.

Un'API essenziale è più facile da far evolvere senza interrompere il funzionamento per gli utenti.

Riepilogo dei livelli di visibilità

Dal più al meno restrittivo:

  • predefinito (privato al modulo)
  • pub(super) — visibile al modulo padre
  • pub(crate) — visibile in tutto il crate
  • pub — visibile ovunque

Verifica rapida

Verifichi la Sua comprensione della visibilità.

Riepilogo

Ha imparato a controllare l'accesso:

  • Gli elementi sono privati per impostazione predefinita; pub li rende pubblici
  • Le struct pub mantengono privati i campi, a meno che ciascuno di essi non sia pub
  • Le enum pub espongono tutte le varianti
  • pub(crate) e pub(super) offrono un controllo più preciso
  • pub use riesporta gli elementi per definire un'API pulita

Domande Frequenti

La lezione «pub e visibilità» è gratuita?

Sì — il testo completo di «pub e visibilità» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.

Cosa imparerò in «pub e visibilità»?

Controllo degli accessi Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Learn Rust Coding?

Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «pub e visibilità»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?

Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Moduli e mod
  2. pub e visibilità
  3. use e percorsi
  4. Crate e crate root
← Torna a Learn Rust Coding