Menu
Coddy logo textTech

Resumen - Enum Shape

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 18 de 61.

challenge icon

Desafío

Fácil

Vamos a construir una calculadora de geometría que utiliza un enum para representar diferentes formas, 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 a través de 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 solo f64 que representa el radio (sintaxis de tupla)
    • Rectangle — contiene campos con nombre: width (f64) y height (f64)
    Implementa un método area que utilice coincidencia de patrones (pattern matching) para calcular el área correcta basada en la variante. Para los círculos, utiliza 3.14159 como π.
  • main.rs: Importa tu módulo shape, crea una instancia de cada variante de forma utilizando las entradas proporcionadas y muestra el área de cada forma.

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

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

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

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

Por ejemplo, con un radio de 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: Crear una forma de Círculo (Circle) usando el radio
    
    // TODO: Crear una forma de Rectángulo (Rectangle) usando el ancho y el alto
    
    // TODO: Imprimir el área de cada forma con un decimal
    // Formato: "Circle area: {area}" y "Rectangle area: {area}"
}

Todas las lecciones de Object Oriented Programming