مراجعة - نقطة قابلة للطباعة
جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 39 من 61.
التحدي
سهلدعنا نجمع كل السمات (traits) القياسية التي تعلمتها من خلال إنشاء هيكل Point كامل الميزات يمكن تصحيحه (debugged)، وعرضه بشكل جميل، ومقارنته من حيث التساوي!
ستقوم بتنظيم الكود الخاص بك عبر ملفين:
point.rs: قم بتعريف هيكلPointعام مع حقولxوyعامة (كلاهماi32). يجب أن يدعم Point الخاص بك ثلاث قدرات:- طباعة التصحيح (Debug printing) باستخدام
{:?}— اشتق (derive) هذا تلقائياً - عرض صديق للمستخدم باستخدام
{}بتنسيق(x, y)— قم بتنفيذ هذا يدوياً باستخدامstd::fmt::Display - مقارنة التساوي باستخدام
==— اشتقPartialEq
- طباعة التصحيح (Debug printing) باستخدام
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
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائط