Перейти до основного вмісту
Модуль 4 · Урок 1 із 27/14 у курсі~12 min
Модульні уроки (1/2)

Визначення та інстанціювання структур

Структури (або структури) у Rust — це користувальницькі типи даних, які дозволяють групувати разом кілька пов’язаних значень. Вони подібні до об'єктів або класів в інших мовах, але без успадкування.

Визначення структури

Щоб визначити структуру, ми використовуємо ключове слово struct, за яким слідує назва в PascalCase. Всередині ми визначаємо імена та типи полів:

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Створення екземпляра

Щоб використовувати структуру, ми повинні створити екземпляр, заповнивши всі вказані поля:

Rust
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 не дозволяє позначати лише певні поля як змінні:

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 також підтримує два інші формати структур, крім класичних структур іменованих полів:

  1. Структури кортежу: вони мають пов’язане ім’я, але поля не мають індивідуальних імен, лише типи. Вони корисні для визначення та диференціації конкретних типів:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. Одиноподібні структури: вони не визначають жодних полів. Вони поводяться як одиниці типу (). Вони корисні, коли вам потрібно реалізувати поведінку (риси) на типі, не зберігаючи в ньому жодних даних.

Спробуйте самі

вправи#rust.m4.l1.e1
Спроби: 0Завантаження…

Визначте структуру User вище main за допомогою полів: ім’я користувача (тип String) і active (тип bool).

Завантаження редактора…
Показати підказку

Напишіть `struct User { username: String, active: bool }`before`main`.

Рішення доступне після 3 спроб

вправи#rust.m4.l1.e2
Спроби: 0Завантаження…

Змініть user1, щоб зробити його змінним (нехай mut user1) і змініть активне поле на false перед друком.

Завантаження редактора…
Показати підказку

Додайте `mut`to`let user1`, щоб зробити його`let mut user1`, потім вставте `user1.active = false;`.

Рішення доступне після 3 спроб

вправи#rust.m4.l1.e3
Спроби: 0Завантаження…

Визначте структуру кортежу з іменем 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 спроб