Fácil Rust
Tornando uma variável mutável
Enunciado
O código abaixo tenta modificar a variável contador, mas não compila porque ela é imutável. Corrija o programa para que a variável possa ser alterada e imprima o valor final.
Requisitos
- A variável
contadordeve ser declarada como mutável. - O programa deve compilar sem erros.
- A saída deve mostrar
Valor final: 15.
Código inicial
fn main() {
let contador = 10;
contador += 5;
println!("Valor final: {contador}");
}
Saída esperada
Valor final: 15
Ver dica
Adicione mut após let na declaração de contador.
Mostrar solução
fn main() {
// Adicionamos `mut` para permitir alteração
let mut contador = 10;
contador += 5; // agora é permitido
println!("Valor final: {contador}");
}
Passo a passo
- A linha
let contador = 10;cria uma variável imutável. Por padrão, Rust não permite alterar seu valor. - A tentativa de fazer
contador += 5;gera erro de compilação:cannot assign twice to immutable variable. - Para corrigir, mudamos a declaração para
let mut contador = 10;. Omutindica ao compilador que a variável pode ser modificada. - Agora
contador += 5;é válido e soma 5 ao valor atual, resultando em 15. - O
println!exibe o valor final formatado.
Por que funciona
Em Rust, a imutabilidade é o padrão para evitar alterações acidentais. Ao usar mut, você declara explicitamente que a variável sofrerá mutação, e o compilador passa a permitir atribuições. Isso mantém a segurança sem abrir mão da flexibilidade quando necessário.
Erros comuns
- Esquecer o
mut:let contador = 10;e depois tentarcontador += 5;causa erro de compilação. Corrija comlet mut contador = 10;. - Usar
mutdesnecessariamente: se a variável nunca for alterada, o compilador emite um avisounused_mut. Remova omutnesse caso. - Tentar modificar uma constante:
const C: i32 = 10;não pode sermutnem alterada. Uselet mutpara valores mutáveis.
Outra forma de resolver
Se você não precisa modificar a variável original, pode usar shadowing para criar uma nova variável com o valor atualizado:
fn main() {
let contador = 10;
let contador = contador + 5;
println!("Valor final: {contador}");
}
Essa abordagem é preferível quando você quer manter a variável original intacta e criar uma nova com o mesmo nome.
Saída esperada
Valor final: 15