Menu
CoddyTech

Ringkasan: Titik yang Dapat Dicetak

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 39 dari 61.

challenge icon

Tantangan

Mudah

Mari satukan semua trait standar yang sudah kamu pelajari dengan membuat struct Point berfitur lengkap yang bisa di-debug, ditampilkan dengan baik, dan dibandingkan kesamaannya!

Kamu akan menyusun kodemu dalam dua file:

  • point.rs: Definisikan struct Point publik dengan field x dan y publik (keduanya bertipe i32). Point-mu harus mendukung tiga kemampuan:
    • Mencetak debug dengan {:?}. Turunkan trait ini secara otomatis
    • Tampilan yang mudah dibaca dengan {} dalam format (x, y): implementasikan secara manual menggunakan std::fmt::Display
    • Perbandingan kesamaan dengan ==: turunkan PartialEq
  • main.rs: Muat module point-mu dan buat dua instance Point menggunakan input yang diberikan. Tunjukkan ketiga kemampuan tersebut dengan mencetak titik pertama dalam format debug, mencetak titik kedua dalam format display, dan membandingkan apakah kedua titik sama.

Output-mu harus menunjukkan ketiga kemampuan trait tersebut:

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

Misalnya, dengan input 3, 5, 3, 5:

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

Dan dengan input 10, 20, 5, 15:

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

Kamu akan menerima empat input: koordinat x dan y untuk titik pertama, lalu koordinat x dan y untuk titik kedua. Parse masing-masing sebagai i32.

Coba sendiri

mod point;

use point::Point;

fn main() {
    // Baca empat 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: Buat dua instance Point menggunakan input tersebut

    // TODO: Cetak titik pertama menggunakan format debug {:?}
    // Format: "Debug: Point { x: ..., y: ... }"

    // TODO: Cetak titik kedua menggunakan format display {}
    // Format: "Display: (..., ...)"

    // TODO: Bandingkan kedua titik dan cetak hasilnya
    // Format: "Equal: true" atau "Equal: false"
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online