Fácil Rust
Classificação com if como expressão
Enunciado
Escreva um programa que leia um número inteiro (pode ser fixo no código) e use if como expressão para classificar o número como "positivo", "negativo" ou "zero". Imprima a classificação.
Requisitos
- Use
ifcomo expressão para atribuir o resultado a uma variável. - Cubra os três casos: positivo, negativo e zero.
- Imprima a classificação no formato
Classificação: <valor>.
Código inicial
fn main() {
let numero = -7; // altere para testar
// complete usando if como expressão
}
Saída esperada
Classificação: negativo
Ver dica
Lembre-se de que if como expressão precisa de else para todos os casos. Você pode encadear else if.
Mostrar solução
fn main() {
let numero = -7; // valor fixo para exemplo
// if como expressão: todos os braços devem retornar &str
let classificacao = if numero > 0 {
"positivo"
} else if numero < 0 {
"negativo"
} else {
"zero"
};
println!("Classificação: {}", classificacao);
}
Passo a passo
- Definimos
numerocom um valor inteiro fixo. Poderia ser lido do usuário, mas mantemos simples. - A expressão
if numero > 0 { ... } else if numero < 0 { ... } else { ... }é avaliada e seu resultado é atribuído aclassificacao. - Cada braço retorna uma string literal (
&str), então o tipo declassificacaoé&str. - O
elsefinal garante que todos os casos sejam cobertos, evitando erro de compilação. - Imprimimos a classificação formatada.
Por que funciona
Em Rust, if é uma expressão, então pode ser usado no lado direito de uma atribuição. Diferente de linguagens onde if é apenas um comando, aqui o valor do bloco é o valor da última expressão dentro dele. Isso permite um código mais limpo e sem variáveis mutáveis desnecessárias.
Erros comuns
- Esquecer o
elsefinal:let x = if cond { 1 };gera erro de compilação porque o tipo não é consistente em todos os caminhos. - Braços com tipos diferentes:
if cond { 1 } else { "dois" }causa erro de tipo. Certifique-se de que todos os braços retornem o mesmo tipo. - Usar
returndentro do bloco: embora possível, não é idiomático paraifcomo expressão.
Outra forma de resolver
Poderia usar match com ranges, mas if é mais direto para comparações simples.
Saída esperada
Classificação: negativo