Menu
Coddy logo textTech

Recapitulação - Enum Shape

Parte da seção Programação Orientada a Objetos do Journey de Rust da Coddy. Lição 18 de 61.

challenge icon

Desafio

Fácil

Vamos criar uma calculadora de geometria que usa 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 público Shape 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 para calcular a área correta com base na variante. Para círculos, use 3.14159 como π.
  • main.rs: importe seu módulo de formas, 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 a correspondência, desconstrua 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 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: Crie uma forma Circle usando o radius
    
    // TODO: Crie uma forma Rectangle usando width e height
    
    // TODO: Imprima a área de cada forma com uma casa decimal
    // Format: "Circle area: {area}" and "Rectangle area: {area}"
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Rust online