Menu
Coddy logo textTech

Recapitulação - Enum Shape

Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 18 de 61.

challenge icon

Desafio

Fácil

Vamos construir uma calculadora de geometria que utiliza um enum para representar diferentes formas, cada uma armazenando suas próprias dimensões. Seu enum Shape demonstrará como um único tipo pode conter diferentes estruturas de dados e fornecer um comportamento unificado por meio de métodos.

Você criará dois arquivos para organizar seu código:

  • shape.rs: Defina um enum Shape público com duas variantes:
    • Circle — contém um único f64 representando o raio (sintaxe de tupla)
    • Rectangle — contém campos nomeados: width (f64) e height (f64)
    Implemente um método area que use correspondência de padrões (pattern matching) para calcular a área correta com base na variante. Para círculos, use 3.14159 como π.
  • main.rs: Importe seu módulo shape, crie uma instância de cada variante de forma usando as entradas fornecidas e imprima a área de cada forma.

Seu método area deve retornar um f64. Ao fazer o matching, desestruture cada variante para extrair suas dimensões e aplique a fórmula apropriada:

  • Área do círculo: π × radius²
  • Área do retângulo: width × height

Sua saída deve exibir a área de cada forma em sua própria linha, com exatamente uma casa decimal:

Circle area: {area}
Rectangle area: {area}

Por exemplo, com um raio de círculo de 5.0 e um retângulo com largura 4.0 e altura 6.0, a saída seria:

Circle area: 78.5
Rectangle area: 24.0

Você receberá três entradas: o raio do círculo, a largura do retângulo e a altura do retângulo.

Experimente você mesmo

mod shape;

use shape::Shape;

fn main() {
    // Ler as entradas
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: Criar uma forma Circle usando o raio (radius)
    
    // TODO: Criar uma forma Rectangle usando largura (width) e altura (height)
    
    // TODO: Imprimir a área de cada forma com uma casa decimal
    // Formato: "Circle area: {area}" e "Rectangle area: {area}"
}

Todas as lições de Object Oriented Programming