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 if como 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

  1. Definimos numero com um valor inteiro fixo. Poderia ser lido do usuário, mas mantemos simples.
  2. A expressão if numero > 0 { ... } else if numero < 0 { ... } else { ... } é avaliada e seu resultado é atribuído a classificacao.
  3. Cada braço retorna uma string literal (&str), então o tipo de classificacao é &str.
  4. O else final garante que todos os casos sejam cobertos, evitando erro de compilação.
  5. 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 else final: 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 return dentro do bloco: embora possível, não é idiomático para if como 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