Resumen - Punto imprimible
Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 39 de 61.
Desafío
Fácil¡Reunamos todos los traits estándar que has aprendido creando una estructura Point completamente funcional que pueda depurarse, mostrarse de forma atractiva y compararse por igualdad!
Organizarás tu código en dos archivos:
point.rs: Define una estructuraPointpública con camposxyypúblicos (ambosi32). Tu Point debe admitir tres capacidades:- Impresión de depuración con
{:?}. Derívala automáticamente - Visualización fácil de usar con
{}en el formato(x, y): impleméntala manualmente usandostd::fmt::Display - Comparación de igualdad con
==: derivaPartialEq
- Impresión de depuración con
main.rs: Incluye tu módulo point y crea dos instancias dePointusando las entradas proporcionadas. Demuestra las tres capacidades imprimiendo el primer punto con el formato de depuración, imprimiendo el segundo punto con el formato de visualización y comparando si los dos puntos son iguales.
Tu salida debe mostrar las tres capacidades de los traits en acción:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Por ejemplo, con las entradas 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueY con las entradas 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseRecibirás cuatro entradas: las coordenadas x e y del primer punto, seguidas de las coordenadas x e y del segundo punto. Convierte cada una a i32.
Pruébalo tú mismo
mod point;
use point::Point;
fn main() {
// Lee cuatro entradas: x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Crea dos instancias de Point usando las entradas
// TODO: Imprime el primer punto usando el formato de depuración {:?}
// Formato: "Debug: Point { x: ..., y: ... }"
// TODO: Imprime el segundo punto usando el formato de visualización {}
// Formato: "Display: (..., ...)"
// TODO: Compara los dos puntos e imprime el resultado
// Formato: "Equal: true" o "Equal: false"
}
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