ЛЕКЦІЯ 15

Структури (Structs) та Перерахування (Enums)

Рецензія: Borrowing

План

  • Struct визначення
  • Enum та pattern matching
  • Methods і impl

Struct

Struct

Комбінація полів (як в C), але з методами. Типи структур: named fields, tuple-like, unit structs.

Struct визначення та використання

struct Person {
  name: String,
  age: u32,
  email: String,
}

let p = Person {
  name: String::from("Alice"),
  age: 30,
  email: String::from("alice@example.com"),
};

println!("{}, {}", p.name, p.age);

Methods з impl

impl Person {
  fn new(name: String, age: u32) -> Person {
    Person { name, age, email: String::new() }
  }
  
  fn greet(&self) {  // immutable borrow
    println!("Hello, {}", self.name);
  }
  
  fn set_email(&mut self, email: String) {  // mutable borrow
    self.email = email;
  }
}

Enum

Enum

Перерахування значень. На відміну від C, варіанти можуть містити дані.

Enum визначення

enum Color {
  Red,
  Green,
  Blue,
}

enum Message {
  Quit,
  Move { x: i32, y: i32 },
  Write(String),
  ChangeColor(u8, u8, u8),
}

let msg = Message::Write(String::from("hello"));

Pattern Matching

Pattern Matching

Розпізнавання та розпакування значень enum за допомогою match.

Match для enum

match msg {
  Message::Quit => println!("Quit"),
  Message::Move { x, y } => println!("Move to {}, {}", x, y),
  Message::Write(s) => println!("Write: {}", s),
  Message::ChangeColor(r, g, b) => println!("Color: {}, {}, {}", r, g, b),
}

Struct типи

Запитання 1

Що повертає match для enum?

  • Завжди значення
  • Значення або вираз у відповідній гілці
  • Завжди String
✅ Правильна відповідь: Значення або вираз у відповідній гілці

Запитання 2

Чому Enum краще за integer flags?

  • Невідомо
  • Type-safe, можна перевізти дані
  • Швидше
✅ Правильна відповідь: Type-safe, можна перевізти дані

Struct vs Enum

[object Object]
[object Object]
[object Object]

Підсумки

  • Struct: групування даних з методами
  • Enum: варіанти з можливістю даних
  • Pattern matching: безпечна розпакування enum
  • impl блоки: асоціовані функції і методи

Далі

Наступна лекція:

Лекція 16: Обработка ошибок с Result и Option

Дякую за увагу! 💾

← Повернутися до списку лекцій