مكون الزر
جزء من قسم 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 مع المعاملاتملخص - مشغل الوسائطتدرّب بنفسك: مترجم Rust عبر الإنترنت