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

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

جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 39 من 61.

challenge icon

التحدي

سهل

دعنا نجمع كل السمات (traits) القياسية التي تعلمتها من خلال إنشاء هيكل Point كامل الميزات يمكن تصحيحه (debugged)، وعرضه بشكل جميل، ومقارنته من حيث التساوي!

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

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

يجب أن يظهر مخرجك جميع قدرات السمات الثلاث قيد التشغيل:

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

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

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

ومع المدخلات 10، 20، 5، 15:

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

ستتلقى أربعة مدخلات: إحداثيات x و y للنقطة الأولى، تليها إحداثيات x و y للنقطة الثانية. قم بتحليل كل منها كـ 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"
}

جميع دروس Object Oriented Programming