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ávelSem 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.
Desafio
FácilVocê 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
Playercom os campos:name: Stringescore: i32 - Leia a primeira entrada como o nome do jogador
- Leia a segunda entrada e converta-a para
i32para a pontuação inicial - Crie uma instância mutável da struct
Playercom esses valores - Leia a terceira entrada e converta-a para
i32para 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
i32para 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 pontoA 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
}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
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final