Desafio Rust

Constantes, estáticas e inferência

Enunciado

Crie um programa que defina uma constante PI do tipo f64 com valor 3.14159, uma variável estática SAUDACAO do tipo &str com valor "Olá", e uma variável local raio cujo tipo seja inferido como f64. Calcule a área do círculo (PI * raio * raio) e imprima uma mensagem formatada usando SAUDACAO e o resultado com duas casas decimais.

Requisitos

  • PI deve ser uma const do tipo f64.
  • SAUDACAO deve ser uma static do tipo &str.
  • raio deve ser uma variável local com tipo inferido (sem anotação explícita).
  • A saída deve ser exatamente Olá, a área do círculo de raio 2.5 é 19.63.

Código inicial

// Defina PI, SAUDACAO e raio
fn main() {
    // calcule a área e imprima
}

Saída esperada

Olá, a área do círculo de raio 2.5 é 19.63
Ver dica

Use const PI: f64 = 3.14159;, static SAUDACAO: &str = "Olá"; e let raio = 2.5;. Formate com {:.2}.

Mostrar solução
const PI: f64 = 3.14159; // constante em tempo de compilação
static SAUDACAO: &str = "Olá"; // variável global imutável

fn main() {
    let raio = 2.5; // tipo f64 inferido
    let area = PI * raio * raio; // cálculo da área
    println!("{SAUDACAO}, a área do círculo de raio {raio} é {area:.2}");
}

Passo a passo

  1. const PI: f64 = 3.14159; declara uma constante global. Constantes exigem anotação de tipo e são avaliadas em tempo de compilação.
  2. static SAUDACAO: &str = "Olá"; declara uma variável estática global. static tem tempo de vida 'static e pode ser acessada em qualquer lugar.
  3. Dentro de main, let raio = 2.5; cria uma variável local. O compilador infere f64 porque o literal 2.5 é um float.
  4. let area = PI * raio * raio; calcula a área usando a constante e a variável. O resultado também é f64.
  5. println! formata a saída com {:.2} para exibir duas casas decimais, e interpola SAUDACAO e raio.

Por que funciona

const e static permitem definir valores globais imutáveis, com diferenças: const é embutida no código onde é usada, enquanto static tem um endereço fixo na memória. A inferência de tipo evita anotações desnecessárias quando o contexto é claro. Juntas, essas ferramentas tornam o código seguro e expressivo.

Erros comuns

  • Esquecer a anotação de tipo em const: const PI = 3.14159; causa erro missing type in constant declaration. Sempre anote: const PI: f64 = 3.14159;.
  • Tentar modificar uma static: SAUDACAO = "Oi"; gera erro, pois static é imutável por padrão. Para mutabilidade, use static mut (com unsafe), mas evite.
  • Inferência ambígua: let raio = 2.5; é f64 por padrão, mas se você escrever let raio = 2; e depois usar em contexto f64, pode precisar de let raio: f64 = 2.0; ou sufixo 2.0f64.

Outra forma de resolver

Se você quiser que raio seja uma constante também, pode declará-lo como const RAIO: f64 = 2.5; e usar RAIO no cálculo. Isso é preferível quando o valor é conhecido em tempo de compilação e nunca muda.

Saída esperada

Olá, a área do círculo de raio 2.5 é 19.63