Menu
Coddy logo textTech

Riepilogo - Punto stampabile

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 39 di 61.

challenge icon

Sfida

Facile

Mettiamo insieme tutti i trait standard che hai imparato creando una struct Point completa, che può essere formattata per il debug, visualizzata in modo elegante e confrontata per verificare l'uguaglianza!

Organizzerai il codice in due file:

  • point.rs: definisci una struct Point pubblica con i campi x e y pubblici (entrambi i32). La tua struct Point dovrebbe supportare tre funzionalità:
    • Stampa di debug con {:?}. Deriva questo trait automaticamente
    • Visualizzazione intuitiva con {} nel formato (x, y): implementala manualmente usando std::fmt::Display
    • Confronto di uguaglianza con ==: deriva PartialEq
  • main.rs: importa il modulo point e crea due istanze di Point usando gli input forniti. Dimostra tutte e tre le funzionalità stampando il primo punto con il formato di debug, stampando il secondo punto con il formato di visualizzazione e confrontando se i due punti sono uguali.

L'output dovrebbe mostrare tutte e tre le funzionalità dei trait in azione:

Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}

Ad esempio, con gli input 3, 5, 3, 5:

Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true

E con gli input 10, 20, 5, 15:

Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false

Riceverai quattro input: le coordinate x e y del primo punto, seguite dalle coordinate x e y del secondo punto. Analizza ciascun valore come i32.

Provalo tu

mod point;

use point::Point;

fn main() {
    // Leggi quattro valori in input: 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 due istanze di Point usando i valori in input

    // TODO: Stampa il primo punto usando il formato di debug {:?}
    // Formato: "Debug: Point { x: ..., y: ... }"

    // TODO: Stampa il secondo punto usando il formato di visualizzazione {}
    // Formato: "Display: (..., ...)"

    // TODO: Confronta i due punti e stampa il risultato
    // Formato: "Equal: true" o "Equal: false"
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online