مقدمة في كتل التنفيذ
جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 1 من 61.
في لغة Rust، تُحدد الهياكل (structs) البيانات التي يحملها النوع، لكنها لا تُحدد ما يمكن لهذا النوع فعله. لإعطاء الهيكل سلوكاً معيناً، نستخدم كتل التنفيذ (implementation blocks) مع الكلمة المفتاحية impl.
تربط كتلة التنفيذ (implementation block) الدوال (التي تُسمى methods) بهيكل (struct) معين. إليك الهيكل الأساسي:
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
يخبر المقطع impl Dog لغة Rust أن كل ما بداخله ينتمي إلى الـ Dog struct. يحافظ هذا الفصل على نظافة تعريف البيانات مع السماح لك بإضافة أي عدد تريده من الـ methods في مقطع التنفيذ (implementation block).
لاستدعاء دالة (method)، استخدم تدوين النقطة (dot notation) على كائن (instance):
fn main() {
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // المخرجات: Rex says woof!
}
هذا النمط من فصل البيانات (الـ struct) عن السلوك (كتلة الـ impl) هو أمر أساسي لتنظيم كود Rust. في الدروس القادمة، سنستكشف كيف تصل الدوال (methods) إلى بيانات الـ struct من خلال معامل &self الذي تراه في المثال أعلاه.
التحدي
سهلأنشئ Cat struct بحقلين: name (String) و lives (u8).
أضف كتلة تنفيذ (implementation block) لـ Cat مع دالة (method) تسمى meow تأخذ &self وتطبع اسم القطة متبوعًا بـ " says meow!".
ستتلقى مدخلين:
- السطر الأول: اسم القطة (String)
- السطر الثاني: عدد الأرواح (u8)
أنشئ نسخة (instance) من Cat بالقيم المقدمة واستدعِ الدالة meow عليها.
تنسيق المخرجات المتوقع:
{name} says meow!ورقة مرجعية
تربط كتل التنفيذ (Implementation blocks) الدوال (methods) بالهياكل (structs) باستخدام الكلمة المفتاحية impl:
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
تفصل كتلة impl تعريف البيانات (struct) عن السلوك (methods). يتم استدعاء الدوال باستخدام تدوين النقطة (dot notation):
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // المخرجات: Rex says woof!
تستخدم الدوال المعامل &self للوصول إلى بيانات الهيكل (struct).
جرّب بنفسك
use std::io;
// TODO: قم بتعريف هيكل (struct) القطة 'Cat' مع حقول 'name' (String) و 'lives' (u8)
// TODO: أضف كتلة تنفيذ (implementation block) للقطة 'Cat' مع طريقة (method) 'meow'
fn main() {
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut lives_input = String::new();
io::stdin().read_line(&mut lives_input).expect("Failed to read line");
let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
// TODO: قم بإنشاء مثيل (instance) من 'Cat' واستدعاء طريقة 'meow'
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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 مع المعاملاتملخص - مشغل الوسائط