Menu
Coddy logo textTech

Обзор структур

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 21 из 66.

Теперь, когда вы понимаете, что такое структуры, давайте узнаем, как их создавать и использовать на практике. Это включает в себя два шага: сначала определение структуры, а затем создание её экземпляров.

Для определения структуры используется ключевое слово struct, за которым следует имя структуры и её поля внутри фигурных скобок. Каждое поле имеет имя и тип:

struct User {
    username: String,
    active: bool,
}

Это создает шаблон для структуры User с двумя полями: username типа String и active типа bool.


Имена структур в Rust следуют стилю PascalCase (также называемому CamelCase) — каждое слово начинается с заглавной буквы, без подчеркиваний. Например: User, BlogPost, GamePlayer.

После того как вы определили структуру, вы можете создавать её экземпляры, указывая значения для каждого поля:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Обратите внимание, что вы указываете имя структуры, за которым следуют фигурные скобки, содержащие имя каждого поля, двоеточие и его значение. Порядок полей не обязательно должен совпадать с порядком их определения.

Чтобы получить доступ к значению поля из экземпляра структуры, используйте точечную нотацию — имя экземпляра, за которым следует точка и имя поля:

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

Вы также можете обновить значение поля, используя точечную нотацию, при условии, что экземпляр объявлен с помощью let mut:

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

Задание

Легко

Вы получите три входных значения: название продукта, цену (в виде десятичного числа) и количество на складе (в виде целого числа). Определите структуру Product с тремя полями: name типа String, price типа f64 и stock типа i32. Затем создайте экземпляр этой структуры, используя входные значения, и выведите информацию о продукте.

Требования:

  • Определите структуру Product с полями: name: String, price: f64 и stock: i32
  • Прочитайте первое входное значение как название продукта
  • Прочитайте второе входное значение и преобразуйте его в f64 для цены
  • Прочитайте третье входное значение и преобразуйте его в i32 для количества на складе
  • Создайте экземпляр структуры Product с этими значениями
  • Выведите информацию о продукте в точном формате, указанном ниже

Ввод:

  • Первая строка: Название продукта (например, Laptop)
  • Вторая строка: Цена в виде десятичного числа (например, 999.99)
  • Третья строка: Количество на складе в виде целого числа (например, 15)

Вывод:

  • Первая строка: Product: [name]
  • Вторая строка: Price: $[price]
  • Третья строка: Stock: [quantity]

Шпаргалка

Имена структур используют PascalCase (например, UserAccount). Чтобы определить структуру, используйте ключевое слово struct, за которым следует имя структуры и её поля внутри фигурных скобок:

struct User {
    username: String,
    active: bool,
}

Каждое поле имеет имя и тип.

Чтобы создать экземпляр структуры, укажите значения для каждого поля:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Порядок полей в экземпляре не обязательно должен совпадать с порядком их определения.

Для доступа к полю используйте точечную нотацию — имя экземпляра, за которым следует точка и имя поля:

println!("{}", user1.username); // выводит: alice
println!("{}", user1.active);   // выводит: true

Попробуйте сами

use std::io;

// TODO: Определите вашу структуру Product здесь


fn main() {
    // Чтение названия продукта
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Чтение цены
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Чтение количества на складе
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: Создайте экземпляр структуры Product, используя введенные значения
    
    
    // TODO: Выведите информацию о продукте в требуемом формате
    
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow