Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ما هي الـ Trait؟

جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 29 من 61.

تسمح لك الـ Generics بكتابة كود يعمل مع أي نوع، ولكن في بعض الأحيان تحتاج إلى ضمان أن النوع يمكنه القيام بشيء محدد. وهنا يأتي دور الـ traits.

تُعرّف السمة (trait) مجموعة من الأساليب (methods) التي يجب على النوع (type) تنفيذها. فكر فيها كعقد—أي نوع "يوقع" هذا العقد يَعِدُ بتقديم السلوك المحدد. إذا كنت قد استخدمت الواجهات (interfaces) في لغات أخرى، فإن السمات (traits) تخدم غرضاً مماثلاً.

إليك كيفية تعريف trait:

trait Describable {
    fn describe(&self) -> String;
}

تقدم الكلمة المفتاحية trait السمة (trait)، متبوعة باسمها. داخل الأقواس المتعرجة، تقوم بالتصريح عن تواقيع الدوال (method signatures)—فقط الاسم، والمعاملات، ونوع الإرجاع، بدون جسم للدالة. تشير الفاصلة المنقوطة بعد التوقيع إلى أن هذا متطلب، وليس تنفيذاً.

تقول سمة Describable هذه: "أي نوع يقوم بتنفيذ هذه السمة يجب أن يوفر طريقة describe تأخذ مرجعاً لنفسها وتعيد String." لا تهتم السمة بكيفية عمل الطريقة—هذا يعود لكل نوع يقوم بتنفيذها.

تصبح السمات (Traits) قوية عندما تقوم أنواع مختلفة متعددة بتنفيذ نفس السمة. يمكن أن يكون كل من Book و Car و Person جميعهم Describable، حيث يقدم كل منهم وصفه الفريد الخاص. تضمن السمة أنهم جميعاً يتشاركون هذه القدرة المشتركة.

challenge icon

التحدي

سهل

لنقم بتعريف أول سمة (trait) لك! تُنشئ السمة عقداً — وعداً بأن أي نوع يقوم بتنفيذها سيوفر سلوكاً معيناً. ستقوم بإنشاء سمة Summarizable يمكن للأنواع المختلفة تنفيذها لتقديم ملخص عن نفسها.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • summary.rs: قم بتعريف سمة عامة (public trait) تسمى Summarizable مع توقيع طريقة (method signature) واحدة: summarize(&self) -> String. تذكر، في تعريف السمة، تقوم فقط بالتصريح عن توقيع الطريقة باستخدام فاصلة منقوطة — بدون جسم (body). هذا يخبر Rust أن "any type that implements this trait must provide a summarize method that returns a String."
  • main.rs: قم باستيراد وحدة summary الخاصة بك واطبع رسالة تؤكد تعريف السمة الخاصة بك. بما أننا لم نتعلم بعد كيفية تنفيذ السمات (هذا هو الدرس القادم!)، فستقوم ببساطة بالتحقق من أن السمة الخاصة بك يتم تجميعها (compiles) بشكل صحيح.

في ملفك الرئيسي، اطبع الرسالة التالية للتأكد من أن تعريف السمة الخاص بك صالح:

Summarizable trait defined successfully!

يركز هذا التحدي بشكل بحت على بناء جملة تعريف السمة — الكلمة المفتاحية trait، واسم السمة، والتصريح عن توقيعات الطرق بدون تنفيذات. في الدرس القادم، ستتعلم كيفية جعل الهياكل (structs) تنفذ هذه السمة!

ورقة مرجعية

تُعرّف السمة (trait) مجموعة من الدوال (methods) التي يجب على النوع (type) تنفيذها. وهي تعمل كعقد يضمن أن النوع يوفر سلوكاً معيناً.

لتعريف سمة، استخدم الكلمة المفتاحية trait متبوعة باسم السمة وتواقيع الدوال (method signatures):

trait Describable {
    fn describe(&self) -> String;
}

تشمل تواقيع الدوال في السمات الاسم، والمعاملات، ونوع الإرجاع، ولكن بدون جسم (body). تشير الفاصلة المنقوطة إلى أن هذا متطلب للأنواع التي تقوم بالتنفيذ.

يمكن لعدة أنواع مختلفة تنفيذ نفس السمة، حيث يوفر كل منها تنفيذه الخاص للدوال المطلوبة.

جرّب بنفسك

mod summary;

fn main() {
    // مهام: اطبع رسالة التأكيد التي تفيد بأنه تم تعريف السمة (trait)
    // المخرجات المتوقعة: "Summarizable trait defined successfully!"
    
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming