Menu
Coddy logo textTech

Изменяемые структуры

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

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

Когда вы объявляете экземпляр структуры как изменяемый (mutable), вы можете изменять любое из его полей, используя точечную нотацию:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Это работает, потому что player является изменяемым

Без ключевого слова mut попытка изменить поле приведет к ошибке компиляции. Изменяемость применяется ко всему экземпляру структуры — вы не можете сделать отдельные поля изменяемыми, оставляя другие неизменяемыми.

challenge icon

Задание

Легко

Вы получите четыре входных значения: имя игрока, начальный счет (целое число), бонусные очки для добавления (целое число) и финальную корректировку счета (целое число). Определите структуру Player с двумя полями: name типа String и score типа i32. Создайте изменяемый (mutable) экземпляр этой структуры, затем несколько раз измените поле score, используя входные значения.

Требования:

  • Определите структуру Player с полями: name: String и score: i32
  • Прочитайте первый входной параметр как имя игрока
  • Прочитайте второй входной параметр и преобразуйте его в i32 для начального счета
  • Создайте изменяемый (mutable) экземпляр структуры Player с этими значениями
  • Прочитайте третий входной параметр и преобразуйте его в i32 для бонусных очков
  • Добавьте бонусные очки к текущему счету игрока, используя точечную нотацию
  • Прочитайте четвертый входной параметр и преобразуйте его в i32 для финальной корректировки
  • Добавьте финальную корректировку к текущему счету игрока
  • Выведите информацию об игроке в точном формате, указанном ниже

Ввод:

  • Первая строка: Имя игрока (например, Alice)
  • Вторая строка: Начальный счет как целое число (например, 50)
  • Третья строка: Бонусные очки как целое число (например, 30)
  • Четвертая строка: Финальная корректировка как целое число (например, 20)

Вывод:

  • Первая строка: Player: [name]
  • Вторая строка: Final Score: [score]

Шпаргалка

Экземпляры структур в Rust по умолчанию неизменяемы. Чтобы изменить значения полей после создания, объявите экземпляр как изменяемый с помощью ключевого слова mut:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Изменение поля с помощью точечной нотации

Изменяемость применяется ко всему экземпляру структуры — вы не можете сделать отдельные поля изменяемыми, оставляя другие неизменяемыми.

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

use std::io;

// TODO: Определите здесь структуру Player с полями name и score

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 initial_score = String::new();
    io::stdin().read_line(&mut initial_score).expect("Failed to read line");
    let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
    
    // Чтение бонусных очков
    let mut bonus = String::new();
    io::stdin().read_line(&mut bonus).expect("Failed to read line");
    let bonus: i32 = bonus.trim().parse().expect("Invalid number");
    
    // Чтение финальной корректировки
    let mut adjustment = String::new();
    io::stdin().read_line(&mut adjustment).expect("Failed to read line");
    let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
    
    // TODO: Создайте изменяемый экземпляр Player
    
    // TODO: Добавьте бонусные очки к счету игрока
    
    // TODO: Добавьте финальную корректировку к счету игрока
    
    // TODO: Выведите результат в требуемом формате
}
quiz iconПроверьте себя

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

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