Модульні уроки (1/2)
Визначення та інстанціювання структур
Структури (або структури) у Rust — це користувальницькі типи даних, які дозволяють групувати разом кілька пов’язаних значень. Вони подібні до об'єктів або класів в інших мовах, але без успадкування.
Визначення структури
Щоб визначити структуру, ми використовуємо ключове слово struct, за яким слідує назва в PascalCase. Всередині ми визначаємо імена та типи полів:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}Створення екземпляра
Щоб використовувати структуру, ми повинні створити екземпляр, заповнивши всі вказані поля:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}Мінливість структури
У Rust весь екземпляр має бути позначений як змінний (mut), якщо ви хочете змінити будь-яке його поле. Rust не дозволяє позначати лише певні поля як змінні:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}Кортежні структури та блочні структури
Rust також підтримує два інші формати структур, крім класичних структур іменованих полів:
- Структури кортежу: вони мають пов’язане ім’я, але поля не мають індивідуальних імен, лише типи. Вони корисні для визначення та диференціації конкретних типів:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Одиноподібні структури: вони не визначають жодних полів. Вони поводяться як одиниці типу
(). Вони корисні, коли вам потрібно реалізувати поведінку (риси) на типі, не зберігаючи в ньому жодних даних.
Спробуйте самі
Визначте структуру User вище main за допомогою полів: ім’я користувача (тип String) і active (тип bool).
Показати підказку
Напишіть `struct User { username: String, active: bool }`before`main`.
Рішення доступне після 3 спроб
Змініть user1, щоб зробити його змінним (нехай mut user1) і змініть активне поле на false перед друком.
Показати підказку
Додайте `mut`to`let user1`, щоб зробити його`let mut user1`, потім вставте `user1.active = false;`.
Рішення доступне після 3 спроб
Визначте структуру кортежу з іменем Color, що містить три поля i32. У main створіть екземпляр Color зі значеннями 255, 0 і 100, присвоївши його змінній my_color, а потім надрукуйте його перший елемент (червоне значення) за допомогою println!.
Показати підказку
Визначте структуру кортежу за допомогою struct Color(i32, i32, i32);`. У основному створіть його як `let my_color = Color(255, 0, 100);`і надрукуйте червоне значення за допомогою`my_color.0`.
Рішення доступне після 3 спроб