Resumen - Enum Shape
Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 18 de 61.
Desafío
FácilConstruyamos 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 enumShapepúblico con dos variantes:Circle: contiene un únicof64que representa el radio (sintaxis de tupla)Rectangle: contiene campos con nombre:width(f64) yheight(f64)
areaque use coincidencia de patrones para calcular el área correcta según la variante. Para los círculos, usa3.14159como π.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.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: 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
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 multimediaPractica por tu cuenta: Compilador de Rust online