0Pricing
Learn Rust Coding · Lekcja

pub i widoczność

Kontrola dostępu

pub i widoczność to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Domyślnie prywatne

W Rust wszystko wewnątrz modułu jest domyślnie prywatne. Inne moduły nie mogą tego zobaczyć, chyba że jawnie udostępni to Pan/Pani za pomocą pub.

To bezpieczne ustawienie domyślne ukrywa szczegóły implementacji, dopóki świadomie ich Pan/Pani nie udostępni.

Funkcje pub

Oznaczenie funkcji jako pub umożliwia wywoływanie jej spoza modułu. Bez tego wywołanie nie przejdzie kompilacji.

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

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

Prywatne funkcje pomocnicze pozostają ukryte

Można pozostawić wewnętrzne funkcje pomocnicze prywatne, udostępniając jednocześnie publiczne API. Funkcja publiczna może wywoływać prywatną, ale kod zewnętrzny nie może tego robić.

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

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

pub Structs ukrywają pola

Uczynienie struktury pub udostępnia typ, ale jego pola pozostają prywatne, chyba że każde z nich również zostanie oznaczone jako pub.

Dzięki temu można kontrolować sposób tworzenia i modyfikowania struktury.

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

Dlaczego ukrywać pola?

Prywatne pola wymuszają zachowanie niezmienników. Kod wywołujący musi korzystać z konstruktora i metod, dzięki czemu można sprawdzać dane wejściowe, a później zmienić wewnętrzny układ bez psucia kodu użytkowników.

pub Enums udostępniają wszystko

W przeciwieństwie do struktur wyliczenie pub automatycznie udostępnia wszystkie swoje warianty. Warianty nie mają oddzielnej widoczności.

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): w obrębie crate

pub(crate) sprawia, że element jest widoczny wszędzie w obrębie tego samego crate, ale nie dla zewnętrznych crate zależnych od danego crate.

To idealne rozwiązanie dla wewnętrznych interfejsów API współdzielonych między modułami.

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

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

pub(super): tylko dla modułu nadrzędnego

pub(super) udostępnia element wyłącznie modułowi nadrzędnemu. Jest to węższy zakres dostępu niż pełne pub.

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

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

Ponowne eksportowanie za pomocą pub use

pub use ponownie eksportuje element, umożliwiając kodowi wywołującemu dostęp do niego przez krótszą lub wygodniejszą ścieżkę. Pozwala to kształtować przejrzyste publiczne API.

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

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

Projektowanie publicznego API

Udostępniaj najmniejszy interfejs wystarczający do wykonania zadania. Pozostaw funkcje pomocnicze prywatne, ukryj pola struktur za metodami i używaj pub(crate) do udostępniania elementów wewnątrz crate.

Wąskie API łatwiej rozwijać bez psucia kodu użytkowników.

Podsumowanie poziomów widoczności

Od najbardziej do najmniej restrykcyjnego:

  • domyślna (prywatna dla modułu)
  • pub(super) — widoczna dla modułu nadrzędnego
  • pub(crate) — widoczna w całym crate
  • pub — widoczna wszędzie

Szybkie sprawdzenie

Sprawdź swoją znajomość widoczności.

Powtórzenie

Nauczył(a) się Pan/Pani kontrolować dostęp:

  • Elementy są domyślnie prywatne; pub je udostępnia
  • Struktury pub zachowują prywatność pól, chyba że każde pole ma oznaczenie pub
  • Wyliczenia pub udostępniają wszystkie warianty
  • pub(crate) i pub(super) zapewniają dokładniejszą kontrolę
  • pub use ponownie eksportuje elementy, pomagając tworzyć przejrzyste API

Często zadawane pytania

Czy lekcja „pub i widoczność” jest bezpłatna?

Tak — pełny tekst „pub i widoczność” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „pub i widoczność”?

Kontrola dostępu Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „pub i widoczność”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Moduły i mod
  2. pub i widoczność
  3. use i ścieżki
  4. Crate'y i główny moduł crate'a
← Powrót do Learn Rust Coding