Обзор структур
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 21 из 66.
Теперь, когда вы понимаете, что такое структуры, давайте узнаем, как на самом деле создавать и использовать их. Это включает два шага: сначала определить структуру структуры, а затем создать её экземпляры.
Чтобы определить структуру, вы используете ключевое слово struct, за которым следуют имя структуры и её поля в фигурных скобках. У каждого поля есть имя и тип:
struct User {
username: String,
active: bool,
}Это создаёт шаблон для структуры User с двумя полями: username типа String и active типа bool.
Соглашение об именовании: имена структур в Rust должны использовать PascalCase (также называемый UpperCamelCase), то есть каждое слово начинается с заглавной буквы, например User, ProductItem или ShoppingCart. Rust предупредит вас, если вы не будете следовать этому соглашению.
После того как вы определили struct, вы можете создать его экземпляры, указав значения для каждого поля:
let user1 = User {
username: String::from("alice"),
active: true,
};Обратите внимание: сначала указывается имя struct, за которым следуют фигурные скобки, содержащие имя каждого поля, двоеточие и его значение. Порядок полей не обязательно должен соответствовать порядку их определения.
Чтобы получить доступ к полям struct instance, используйте точечную нотацию: запишите имя instance, затем точку и имя поля:
println!("Username: {}", user1.username);
println!("Active: {}", user1.active);Здесь user1.username обращается к полю username объекта user1, а user1.active обращается к полю active. Вы можете использовать значения этих полей везде, где использовали бы обычную переменную.
Задание
ЛегкоВы получите три входных значения: название продукта, цену (в виде десятичного числа) и количество на складе (в виде целого числа). Определите структуру 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]
Попробуйте сами
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: Выведите информацию о продукте в требуемом формате
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Итоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust