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ędnegopub(crate)— widoczna w całym cratepub— 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;
pubje udostępnia - Struktury
pubzachowują prywatność pól, chyba że każde pole ma oznaczeniepub - Wyliczenia
pubudostępniają wszystkie warianty pub(crate)ipub(super)zapewniają dokładniejszą kontrolępub useponownie 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
- Moduły i mod
- pub i widoczność
- use i ścieżki
- Crate'y i główny moduł crate'a