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