Обзор структур
Часть раздела 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;Задание
ЛегкоВы получите три входных значения: название продукта, цену (в виде десятичного числа) и количество на складе (в виде целого числа). Определите структуру 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: Выведите информацию о продукте в требуемом формате
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента