ملخص - التعداد Shape
جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 18 من 61.
التحدي
سهللنَبْنِ حاسبةً هندسيةً تستخدم enum لتمثيل أشكال مختلفة، بحيث يخزّن كل شكل أبعاده الخاصة. سيُوضّح تعداد Shape الخاص بك كيف يمكن لنوع واحد أن يحتوي على هياكل بيانات مختلفة ويوفّر سلوكًا موحّدًا من خلال الأساليب.
ستنشئ ملفين لتنظيم التعليمات البرمجية الخاصة بك:
shape.rs: عرّف تعدادShapeعامًا باستخدام متغيرين:Circle: يحتوي على قيمةf64واحدة تمثّل نصف القطر (صياغة tuple)Rectangle: يحتوي على حقول مسمّاة:width(f64) وheight(f64)
areaيستخدم مطابقة الأنماط لحساب المساحة الصحيحة استنادًا إلى المتغير. بالنسبة إلى الدوائر، استخدم3.14159باعتبارها قيمة π.main.rs: أدرِج وحدة shape الخاصة بك، وأنشئ مثيلًا واحدًا من كل متغير من متغيرات الشكل باستخدام المدخلات المُعطاة، واطبع مساحة كل شكل.
يجب أن يُرجع أسلوب area قيمة من النوع f64. عند إجراء المطابقة، فكّك كل متغير لاستخراج أبعاده وطبّق الصيغة المناسبة:
- مساحة الدائرة:
π × radius² - مساحة المستطيل:
width × height
يجب أن يعرض الناتج مساحة كل شكل في سطر مستقل، مع منزلة عشرية واحدة بالضبط:
Circle area: {area}
Rectangle area: {area}على سبيل المثال، إذا كان نصف قطر الدائرة 5.0 وكان للمستطيل عرض 4.0 وارتفاع 6.0، فسيكون الناتج:
Circle area: 78.5
Rectangle area: 24.0ستتلقى ثلاثة مدخلات: نصف قطر الدائرة، وعرض المستطيل، وارتفاع المستطيل.
جرّب بنفسك
mod shape;
use shape::Shape;
fn main() {
// قراءة المدخلات
let mut radius_input = String::new();
std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
let radius: f64 = radius_input.trim().parse().expect("Invalid number");
let mut width_input = String::new();
std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: f64 = width_input.trim().parse().expect("Invalid number");
let mut height_input = String::new();
std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: f64 = height_input.trim().parse().expect("Invalid number");
// TODO: أنشئ شكل Circle باستخدام radius
// TODO: أنشئ شكل Rectangle باستخدام width و height
// TODO: اطبع مساحة كل شكل بمنزلة عشرية واحدة
// Format: "Circle area: {area}" and "Rectangle area: {area}"
}
جميع دروس البرمجة كائنية التوجه
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائطتدرّب بنفسك: مترجم Rust عبر الإنترنت