Menu
Coddy logo textTech

Structs Mutáveis

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 23 de 66.

Por padrão, instâncias de struct em Rust são imutáveis - uma vez que você as cria, não pode alterar os valores de seus campos. No entanto, assim como com outras variáveis, você pode tornar uma instância de struct mutável adicionando a palavra-chave mut ao declará-la.

Quando você declara uma instância de struct como mutável, você pode modificar qualquer um de seus campos usando a notação de ponto:

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

player.score = 100; // Isso funciona porque player é mutável

Sem a palavra-chave mut, tentar alterar um campo resultaria em um erro de compilação. A mutabilidade se aplica a toda a instância da struct - você não pode tornar campos individuais mutáveis enquanto mantém outros imutáveis.

challenge icon

Desafio

Fácil

Você receberá quatro entradas: um nome de jogador, uma pontuação inicial (como um número inteiro), uma pontuação de bônus para adicionar (como um número inteiro) e um ajuste de pontuação final (como um número inteiro). Defina uma struct Player com dois campos: name do tipo String e score do tipo i32. Crie uma instância mutável desta struct e, em seguida, modifique o campo score várias vezes usando os valores de entrada.

Requisitos:

  • Defina uma struct Player com os campos: name: String e score: i32
  • Leia a primeira entrada como o nome do jogador
  • Leia a segunda entrada e converta-a para i32 para a pontuação inicial
  • Crie uma instância mutável da struct Player com esses valores
  • Leia a terceira entrada e converta-a para i32 para a pontuação de bônus
  • Adicione a pontuação de bônus à pontuação atual do jogador usando a notação de ponto
  • Leia a quarta entrada e converta-a para i32 para o ajuste final
  • Adicione o ajuste final à pontuação atual do jogador
  • Imprima as informações do jogador no formato exato mostrado abaixo

Entrada:

  • Primeira linha: Nome do jogador (ex: Alice)
  • Segunda linha: Pontuação inicial como um número inteiro (ex: 50)
  • Terceira linha: Pontuação de bônus como um número inteiro (ex: 30)
  • Quarta linha: Ajuste final como um número inteiro (ex: 20)

Saída:

  • Primeira linha: Player: [name]
  • Segunda linha: Final Score: [score]

Folha de consulta

Instâncias de struct em Rust são imutáveis por padrão. Para modificar os valores dos campos após a criação, declare a instância como mutável usando a palavra-chave mut:

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

player.score = 100; // Modifica o campo usando a notação de ponto

A mutabilidade se aplica a toda a instância da struct - você não pode tornar campos individuais mutáveis enquanto mantém outros imutáveis.

Experimente você mesmo

use std::io;

// TODO: Defina a struct Player aqui com os campos name e score

fn main() {
    // Ler o nome do jogador
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Ler a pontuação inicial
    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");
    
    // Ler a pontuação de bônus
    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");
    
    // Ler o ajuste final
    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: Crie uma instância mutável de Player
    
    // TODO: Adicione a pontuação de bônus à pontuação do jogador
    
    // TODO: Adicione o ajuste final à pontuação do jogador
    
    // TODO: Imprima a saída no formato exigido
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow