Resumen - Punto imprimible
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 39 de 61.
Desafío
Fácil¡Vamos a reunir todos los traits estándar que has aprendido creando una estructura Point completa que se pueda depurar, mostrar bellamente y comparar para verificar su igualdad!
Organizarás tu código en dos archivos:
point.rs: Define una estructuraPointpública con campos públicosxey(ambosi32). Tu Point debe admitir tres capacidades:- Impresión de depuración con
{:?}— deriva esto automáticamente - Visualización amigable para el usuario con
{}en el formato(x, y)— implementa esto manualmente usandostd::fmt::Display - Comparación de igualdad con
==— derivaPartialEq
- Impresión de depuración con
main.rs: Importa tu módulo point y crea dos instancias dePointutilizando 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 para el primer punto, seguidas de las coordenadas x e y para el segundo punto. Analiza cada una como 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 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