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