Menu
Coddy logo textTech

Słowo kluczowe public

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 9 z 61.

W poprzedniej lekcji nauczyłeś się organizować kod w osobnych plikach modułów. Jeśli jednak spróbujesz użyć struktury Player z pliku main.rs, napotkasz błąd kompilatora. Dzieje się tak, ponieważ wszystko w module Rust jest domyślnie prywatne.

Aby elementy były dostępne spoza ich modułu, musisz jawnie oznaczyć je słowem kluczowym pub:

// player.rs
pub struct Player {
    pub name: String,
    pub score: u32,
}

impl Player {
    pub fn new(name: String) -> Player {
        Player { name, score: 0 }
    }
}

Zwróć uwagę, że pub pojawia się w kilku miejscach: przy samej strukturze, przy każdym polu i przy metodzie. Każdy element wymaga własnej deklaracji widoczności.

Bez pub przy strukturze inne pliki nie mogą nawet odwołać się do typu. Bez pub przy polach nie mogą uzyskać bezpośredniego dostępu do danych. Bez pub przy metodach nie mogą ich wywoływać.

Teraz w pliku main.rs możesz używać publicznych elementów modułu:

// main.rs
mod player;

use player::Player;

fn main() {
    let p = Player::new(String::from("Alice"));
    println!("{}", p.name);
}

Instrukcja use wprowadza Player do zakresu, dzięki czemu nie musisz za każdym razem pisać player::Player. To podejście, w którym domyślnie wszystko jest prywatne, jest celowe. Zachęca cię do uważnego zastanowienia się, które części twojego kodu powinny być udostępnione światu zewnętrznemu.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty katalog produktów, organizując kod w dwóch plikach i udostępniając odpowiednie elementy, aby można było z nich korzystać w programie głównym.

Utworzysz dwa pliki:

  • product.rs: Zdefiniuj strukturę Product z dwoma polami: name (String) i price (f64). Dodaj funkcję skojarzoną o nazwie new, która przyjmuje nazwę i cenę, a następnie zwraca nowy element Product. Pamiętaj, aby oznaczyć strukturę, jej pola i metodę jako publiczne, żeby można było uzyskać do nich dostęp spoza modułu.
  • main.rs: Zadeklaruj moduł product, wprowadź Product do zakresu za pomocą instrukcji use, a następnie utwórz produkt i wyświetl jego szczegóły.

Zastanów się dokładnie, gdzie potrzebujesz słowa kluczowego pub: sama struktura musi być widoczna, pola muszą być dostępne do odczytu, a metoda konstruktora musi być możliwa do wywołania z main.rs.

Wynik powinien mieć dokładnie następujący format:

Product: {name}, Price: ${price}

Na przykład, jeśli utworzysz produkt o nazwie "Laptop" i cenie 999.99, wynik będzie następujący:

Product: Laptop, Price: $999.99

Otrzymasz dwa dane wejściowe: nazwę produktu i jego cenę.

Spróbuj swoich sił

// Zadeklaruj moduł product
mod product;

// TODO: Wprowadź Product do zasięgu za pomocą instrukcji use

fn main() {
    // Odczytaj dane wejściowe
    let mut name = String::new();
    std::io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut price_input = String::new();
    std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // TODO: Utwórz nowy obiekt Product za pomocą funkcji Product::new
    
    // TODO: Wyświetl szczegóły produktu w formacie:
    // Produkt: {name}, Cena: ${price}
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online