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
PIdeve ser umaconstdo tipof64.SAUDACAOdeve ser umastaticdo tipo&str.raiodeve 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
const PI: f64 = 3.14159;declara uma constante global. Constantes exigem anotação de tipo e são avaliadas em tempo de compilação.static SAUDACAO: &str = "Olá";declara uma variável estática global.statictem tempo de vida'statice pode ser acessada em qualquer lugar.- Dentro de
main,let raio = 2.5;cria uma variável local. O compilador inferef64porque o literal2.5é um float. let area = PI * raio * raio;calcula a área usando a constante e a variável. O resultado também éf64.println!formata a saída com{:.2}para exibir duas casas decimais, e interpolaSAUDACAOeraio.
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 erromissing type in constant declaration. Sempre anote:const PI: f64 = 3.14159;. - Tentar modificar uma
static:SAUDACAO = "Oi";gera erro, poisstaticé imutável por padrão. Para mutabilidade, usestatic mut(comunsafe), mas evite. - Inferência ambígua:
let raio = 2.5;éf64por padrão, mas se você escreverlet raio = 2;e depois usar em contextof64, pode precisar delet raio: f64 = 2.0;ou sufixo2.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