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¡Reunamos todos los traits estándar que has aprendido creando un struct Point completamente funcional que se pueda depurar, mostrar elegantemente y comparar para comprobar la igualdad!
Organizarás tu código en dos archivos:
point.rs: Define un struct públicoPointcon los campos públicosxyy(ambosi32). Tu Point debe admitir tres capacidades:- Impresión de depuración con
{:?}. Deriva esto automatically - display fácil de usar con
{}en el formato(x, y): impleméntalo manualmente usingstd::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 dePointusing las entradas proporcionadas. Demuestra las tres capacidades imprimiendo el primer punto con formato de depuración, imprimiendo el segundo punto con formato de display 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 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 multimediaPractica por tu cuenta: Compilador de Rust online