Resumen - Enum Shape
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 18 de 61.
Desafío
FácilVamos 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 enumShapepúblico con dos variantes:Circle— contiene un solof64que representa el radio (sintaxis de tupla)Rectangle— contiene campos con nombre:width(f64) yheight(f64)
areaque utilice coincidencia de patrones (pattern matching) para calcular el área correcta basada en la variante. Para los círculos, utiliza3.14159como π.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.0Recibirá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
1Métodos y Comportamiento
Intro a Bloques de ImplementaciónEl Parámetro SelfMétodos MutablesFunciones AsociadasMúltiples Bloques de ImplementaciónEncadenamiento de MétodosResumen - Acciones de Rectángulo4Proyecto: Mascota virtual
Definir la mascotaAlimentar a la mascota7Traits estándar
El trait DebugEl trait DisplayClone y CopyTraits de igualdadResumen - Punto imprimible10Proyecto: Sistema de documentos
El Trait DrawComponente de texto2Encapsulamiento y módulos
Conceptos básicos de módulosLa palabra clave PublicCampos privadosGettersSettersRepaso - Casillero seguro5Genéricos
Estructuras genéricasMétodos genéricosMúltiples tipos genéricosFunciones genéricasResumen - Punto de coordenadas8Traits como límites
Sintaxis de límites de traitsLímites múltiplesLa cláusula whereRetornar tipos con traitsResumen: Impresora genérica11Patrones de diseño en Rust
Patrón NewtypeComposiciónEl Trait DropFrom e IntoResumen - Mock de Smart Pointer3Enums avanzados
Enums con datosMétodos en EnumsCoincidencia de variantes de datosEl Enum Option revisitadoResumen - Enum Shape6Definición de Traits
¿Qué es un Trait?Implementación de TraitsImplementaciones por defectoSobrescribir valores por defectoTraits con parámetrosResumen - Reproductor multimedia