Definiowanie i używanie struktur
Utworzą Państwo własne struktury danych za pomocą struktur, w tym struktur krotkowych i struktur jednostkowych, aby grupować powiązane dane.
Definiowanie i używanie struktur to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 1 z 3. 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 3 lekcji w sumie.
Poznaj struktury: niestandardowe typy danych
W Rust struktury (w skrócie structs) służą do tworzenia niestandardowych typów danych, które pozwalają nazwać i połączyć wiele powiązanych wartości w znaczącą całość.
Potraktuj strukturę jak schemat użytkownika, koloru lub punktu w przestrzeni. Zamiast przechowywać imię, adres e-mail i wiek użytkownika w osobnych zmiennych, można umieścić je wszystkie w strukturze User.
Pomaga to logicznie organizować dane oraz ułatwiać czytanie i utrzymywanie kodu.
Definiowanie klasycznej struktury
Najczęściej używanym rodzajem struktury jest struktura klasyczna, w której nadaje się nazwy poszczególnym elementom danych, zwanym polami. Oto sposób jej definiowania:
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
// This code only defines the struct blueprint.
// No actual user has been created yet!
println!("Struct 'User' blueprint defined.");
}Tworzenie instancji struktur
Po zdefiniowaniu struktury można utworzyć jej konkretne instancje. Każda instancja przechowuje określone wartości swoich pól. Instancję tworzy się, podając konkretne wartości dla każdego pola.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User instance created!");
}Dostęp do pól struktury
Aby pobrać dane z instancji struktury, używa się notacji kropkowej. Wystarczy wpisać nazwę instancji, kropkę (.), a następnie nazwę pola.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User's username: {}", user1.username);
println!("User's email: {}", user1.email);
}Mutowalność struktur
Podobnie jak zwykłe zmienne, całe instancje struktur można oznaczyć jako zmienne za pomocą słowa kluczowego mut. Jeśli instancja jest zmienna, można zmieniać wszystkie jej pola.
Nie można oznaczyć jako zmiennych tylko wybranych pól; mutowalność dotyczy całej instancji struktury.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("Old email: {}", user1.email);
user1.email = String::from("new_alice@example.com");
println!("New email: {}", user1.email);
}Struktury krotkowe: pola bez nazw
Struktury krotkowe to inna forma struktur, która wygląda jak krotka, ale ma nazwę. Są przydatne, gdy chce się nadać krotce odrębny typ, ale nie ma potrzeby nazywania poszczególnych pól.
Na przykład Color(i32, i32, i32) to nazwana krotka grupująca trzy liczby całkowite.
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Tuple structs 'Color' and 'Point' defined.");
}Używanie struktur krotkowych
Tworzenie instancji struktury krotkowej przypomina tworzenie zwykłej krotki. Aby uzyskać dostęp do zawartych w niej wartości, używa się notacji kropkowej wraz z ich indeksem, zaczynając od 0.
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}Struktury podobne do jednostkowych: znaczniki
Można również definiować struktury, które w ogóle nie mają pól. Nazywa się je strukturami podobnymi do jednostkowych, ponieważ zachowują się podobnie do typu jednostkowego ().
Są często używane jako znaczniki do implementowania określonego traitu dla typu, gdy same dane nie mają znaczenia.
struct AlwaysTrue;
fn main() {
let subject = AlwaysTrue;
// Unit-like structs don't store data directly,
// but they can be instantiated and used as types.
println!("Unit-like struct 'AlwaysTrue' created.");
}Składnia aktualizacji struktury
Jeśli trzeba utworzyć nową instancję struktury na podstawie istniejącej, zmieniając tylko wartości niektórych pól, Rust oferuje wygodną składnię aktualizacji struktury (..).
Ta składnia przenosi pozostałe pola z podanej instancji, więc nie można już używać oryginalnej instancji, jeśli zawiera pola implementujące Copy.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
let user2 = User {
email: String::from("bob@example.com"),
username: String::from("bob456"),
..user1 // Copy remaining fields from user1
};
println!("User 2 email: {}", user2.email);
println!("User 2 active: {}", user2.active);
// user1.username is now moved, so user1 can't be used here.
}Quiz ze struktur
Sprawdź swoją wiedzę o strukturach w Rust.
Podsumowanie: struktury
Dowiedziałeś(-aś) się, jak definiować i używać struktur w Rust!
- Struktury klasyczne grupują nazwane pola, tworząc niestandardowe typy danych.
- Struktury krotkowe to nazwane krotki, przydatne, gdy nazwy pól nie są konieczne.
- Struktury podobne do jednostkowych nie mają pól i pełnią funkcję znaczników.
- Instancje struktur można oznaczyć jako
mut, aby umożliwić modyfikowanie ich pól. - Składnia
..pomaga tworzyć nowe instancje na podstawie istniejących.
Struktury są podstawą organizowania powiązanych danych w programach Rust, dzięki czemu kod jest bardziej uporządkowany i czytelny.
Często zadawane pytania
Czy lekcja „Definiowanie i używanie struktur” jest bezpłatna?
Tak — pełny tekst „Definiowanie i używanie struktur” 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 3 lekcji w sumie.
Co nauczysz się w „Definiowanie i używanie struktur”?
Utworzą Państwo własne struktury danych za pomocą struktur, w tym struktur krotkowych i struktur jednostkowych, aby grupować powiązane dane. Ć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 1 z 3.
Ile czasu zajmuje lekcja „Definiowanie i używanie struktur”?
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
- Definiowanie i używanie struktur
- Enumny dla własnych typów
- Potężne dopasowywanie wzorców