Menu
Coddy logo textTech

Resumen - Enum Shape

Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 18 de 61.

challenge icon

Desafío

Fácil

Construyamos una calculadora de geometría que use un enum para representar diferentes figuras, cada una almacenando sus propias dimensiones. Tu enum Shape demostrará cómo un solo tipo puede contener diferentes estructuras de datos y proporcionar un comportamiento unificado mediante métodos.

Crearás dos archivos para organizar tu código:

  • shape.rs: Define un enum Shape público con dos variantes:
    • Circle: contiene un único f64 que representa el radio (sintaxis de tupla)
    • Rectangle: contiene campos con nombre: width (f64) y height (f64)
    Implementa un método area que use coincidencia de patrones para calcular el área correcta según la variante. Para los círculos, usa 3.14159 como π.
  • main.rs: Importa tu módulo de figuras, crea una instancia de cada variante de figura usando las entradas proporcionadas e imprime el área de cada figura.

Tu método area debe devolver un f64. Al hacer la coincidencia, desestructura cada variante para extraer sus dimensiones y aplicar la fórmula correspondiente:

  • Área del círculo: π × radius²
  • Área del rectángulo: width × height

Tu salida debe mostrar el área de cada figura en su propia línea, con exactamente un decimal:

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

Por ejemplo, con un radio del círculo de 5.0 y un rectángulo con un ancho de 4.0 y una altura de 6.0, la salida sería:

Circle area: 78.5
Rectangle area: 24.0

Recibirás tres entradas: el radio del círculo, el ancho del rectángulo y la altura del rectángulo.

Pruébalo tú mismo

mod shape;

use shape::Shape;

fn main() {
    // Leer 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: Crea una forma Circle usando el radius
    
    // TODO: Crea una forma Rectangle usando width y height
    
    // TODO: Imprime el área de cada forma con un decimal
    // Format: "Circle area: {area}" and "Rectangle area: {area}"
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Rust online