تخطَّ إلى المحتوى

impl

كتلة التنفيذ impl

impl تربط الدوال (methods) بهيكل أو تعداد معيّن، أو تنفّذ سمة (trait) عليه — هي مكان كتابة سلوك الأنواع.

Rust تفصل تعريف البيانات (struct/enum) عن سلوكها: البيانات تُعرَّف بـ struct أو enum، والدوال المرتبطة بها تُكتب داخل كتلة impl منفصلة. يمكن أن يكون لنوع واحد عدّة كتل impl، وتُستخدم impl أيضًا لتنفيذ سمة (trait) محدّدة على نوع ما.

الدالة الأولى بمعامل &self تصبح تابعًا (method) يُستدعى بنقطة (instance.method())، أما الدوال بلا self فتُستدعى عبر اسم النوع مباشرة (النوع::function()) وتُستخدم غالبًا كدوال إنشاء (constructors).

الصياغة

impl TypeName {
    fn method(&self) -> T { ... }
    fn new() -> Self { ... }
}
impl TraitName for TypeName { ... }

📄 مثال

struct Circle { radius: f64 }

impl Circle {
    fn new(radius: f64) -> Self {
        Circle { radius }
    }

    fn area(&self) -> f64 {
        3.14 * self.radius * self.radius
    }
}

let c = Circle::new(2.0);
println!("{}", c.area());

أهم النقاط

العنصرالوظيفة
fn method(&self)تابع يقرأ الحالة دون تعديلها
fn method(&mut self)تابع يعدّل حقول الكائن
fn new() -> Selfنمط شائع لدالة إنشاء لا تأخذ self
impl Trait for Typeتنفيذ سمة معيّنة على النوع

💡 نصائح عملية

  • اجعل الدالة تأخذ &self ما أمكن، ولا تستخدم self (بدون &) إلا إذا أردت نقل ملكية الكائن نفسه
  • استخدم اسمًا اصطلاحيًا new لدالة الإنشاء — الاتفاق الشائع في مجتمع Rust

⚠️ أخطاء شائعة

  • نسيان & قبل self فيتحوّل التابع لنقل ملكية الكائن كاملًا عند كل استدعاء
  • محاولة استدعاء تابع &mut self على متغيّر غير معرّف بـ mut

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار RUST الكامل بالعربي.