Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - نقطة قابلة للطباعة

جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 39 من 61.

challenge icon

التحدي

سهل

لنجمع معًا جميع traits القياسية التي تعلمتها من خلال إنشاء بنية Point متكاملة الميزات يمكن إجراء debug لها، وعرضها بشكل جميل، ومقارنتها للتحقق من المساواة!

ستنظم شفرتك عبر ملفين:

  • point.rs: Define بنية Point public تحتوي على حقلي x وy public (كلاهما i32). يجب أن تدعم Point ثلاث إمكانيات:
    • طباعة Debug باستخدام {:?}. اشتق ذلك automatically
    • عرض سهل الاستخدام باستخدام {} بالتنسيق (x, y): نفّذ ذلك يدويًا باستخدام std::fmt::Display
    • مقارنة المساواة باستخدام ==: اشتق PartialEq
  • main.rs: استورد وحدة point وأنشئ مثيلين من Point باستخدام inputs المقدمة. اعرض الإمكانيات الثلاث جميعها من خلال طباعة النقطة first بتنسيق debug، وطباعة النقطة second بتنسيق display، ومقارنة ما إذا كانت النقطتان متساويتين.

يجب أن يُظهر output إمكانيات traits الثلاث جميعها قيد التنفيذ:

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

على سبيل المثال، باستخدام inputs 3، 5، 3، 5:

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

وبUsing inputs 10، 20، 5، 15:

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

ستتلقى four inputs: إحداثيا x وy للنقطة first، يليهما إحداثيا x وy للنقطة second. نفّذ parse لكل منها باعتباره i32.

جرّب بنفسك

mod point;

use point::Point;

fn main() {
    // اقرأ أربعة مدخلات: 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: أنشئ مثيلين من Point باستخدام المدخلات

    // TODO: اطبع النقطة الأولى باستخدام تنسيق التصحيح {:?}
    // التنسيق: "Debug: Point { x: ..., y: ... }"

    // TODO: اطبع النقطة الثانية باستخدام تنسيق العرض {}
    // التنسيق: "Display: (..., ...)"

    // TODO: قارن النقطتين واطبع النتيجة
    // التنسيق: "Equal: true" أو "Equal: false"
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Rust عبر الإنترنت