مكون الزر
جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 51 من 61.
التحدي
سهللنواصل بناء نظام المستندات الخاص بنا عن طريق إضافة مكون واجهة مستخدم ثانٍ: Button. تماماً مثل TextField، سيقوم هذا المكون بتنفيذ سمة (trait) الـ Draw، مما يوضح كيف يمكن للأنواع المختلفة مشاركة واجهة برمجية مشتركة.
ستقوم بتوسيع مشروعك بملف وحدة (module) آخر:
draw.rs: احتفظ بسمةDrawالخاصة بك من التحديات السابقة.text_field.rs: احتفظ بهيكلTextFieldوتنفيذه لسمةDraw.button.rs: أنشئ هيكلButtonبحقلين عامين:label(من نوعString) وwidth(من نوعu32). قم بتنفيذ سمةDrawلـButtonبحيث يؤدي استدعاءdraw()إلى طباعة الزر بهذا التنسيق:Button: {label} (width: {width})main.rs: قم باستيراد الوحدات الثلاث جميعها. أنشئ كلاً منTextFieldوButton، ثم استدعِdraw()على كل منهما لتصيير المكونين.
ستحتاج وحدة button الخاصة بك إلى الوصول إلى سمة Draw باستخدام crate::draw::Draw، تماماً كما فعلت مع TextField.
سيتم توفير المدخلات التالية:
- السطر الأول: محتوى حقل النص (text field)
- السطر الثاني: تسمية الزر (button's label)
- السطر الثالث: عرض الزر (كعدد)
يجب أن يعرض مخرجك حقل النص أولاً، ثم الزر، كل منهما في سطر مستقل:
Text: Welcome
Button: Submit (width: 100)جرّب بنفسك
mod draw;
mod text_field;
mod button;
use draw::Draw;
use text_field::TextField;
use button::Button;
pub struct Label {
pub text: String,
}
impl Draw for Label {
fn draw(&self) {
println!("{}", self.text);
}
}
fn main() {
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let content = input1.trim().to_string();
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let label = input2.trim().to_string();
let mut input3 = String::new();
std::io::stdin().read_line(&mut input3).expect("Failed to read line");
let width: u32 = input3.trim().parse().expect("Failed to parse width");
let text_field = TextField { content };
text_field.draw();
// TODO: قم بإنشاء `Button` باستخدام `label` و `width` ، ثم استدعِ `draw()`
}جميع دروس 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 مع المعاملاتملخص - مشغل الوسائط