السمات
السمات (Traits)
Section titled “السمات (Traits)”السمات تُشبه الواجهات في لغات أخرى. تُحدد سلوكاً مشتركاً يمكن لأنواع مختلفة تنفيذه.
تعريف سمة
Section titled “تعريف سمة”سمة قابل_للحساب { دالة قيمة(&ذاتي) -> ص64;}تنفيذ سمة لهيكل
Section titled “تنفيذ سمة لهيكل”هيكل نقطة { س: ص64, ص: ص64,}
نفذ قابل_للحساب لـ نقطة { دالة قيمة(&ذاتي) -> ص64 { أرجع ذاتي.س + ذاتي.ص; }}استخدام السمة
Section titled “استخدام السمة”دع نق = نقطة { س: 10, ص: 20 };دع الناتج = نق.قيمة(); // 30اطبع_صحيح(الناتج);تنفيذ نفس السمة لأنواع مختلفة
Section titled “تنفيذ نفس السمة لأنواع مختلفة”سمة قابل_للحساب { دالة قيمة(&ذاتي) -> ص64;}
// النقطةهيكل نقطة { س: ص64, ص: ص64,}
نفذ قابل_للحساب لـ نقطة { دالة قيمة(&ذاتي) -> ص64 { أرجع ذاتي.س + ذاتي.ص; }}
// العدادهيكل عداد { قيمة: ص64,}
نفذ قابل_للحساب لـ عداد { دالة قيمة(&ذاتي) -> ص64 { أرجع ذاتي.قيمة * 2; }}سمات متعددة
Section titled “سمات متعددة”يمكن لهيكل تنفيذ عدة سمات:
سمة قابل_للطباعة { دالة اطبع(&ذاتي);}
سمة قابل_للمقارنة { دالة يساوي(&ذاتي, آخر: &ذاتي) -> منطقي;}الأنواع المرتبطة (Associated Types)
Section titled “الأنواع المرتبطة (Associated Types)”يمكن للسمة تعريف أنواع مرتبطة:
سمة قابل_للتحويل { نوع ناتج; دالة حول(&ذاتي) -> صحيح;}
هيكل نقطة { س: صحيح, ص: صحيح,}
نفذ قابل_للتحويل لـ نقطة { نوع ناتج = صحيح; دالة حول(&ذاتي) -> صحيح { أرجع 7; }}الأنواع المرتبطة المعممة (GATs)
Section titled “الأنواع المرتبطة المعممة (GATs)”GAT بمعامل واحد
Section titled “GAT بمعامل واحد”سمة حاوية { نوع عنصر<ط>; دالة أول(&ذاتي) -> صحيح;}
هيكل صندوق_أرقام { قيمة: صحيح,}
نفذ حاوية لـ صندوق_أرقام { نوع عنصر<ط> = صحيح; دالة أول(&ذاتي) -> صحيح { أرجع 42; }}GAT بعدة معاملات
Section titled “GAT بعدة معاملات”سمة محول { نوع تحويل<أ, ب>; دالة طبق(&ذاتي, قيمة: صحيح) -> صحيح;}
هيكل مضاعف { عامل: صحيح,}
نفذ محول لـ مضاعف { نوع تحويل<أ, ب> = صحيح; دالة طبق(&ذاتي, قيمة: صحيح) -> صحيح { أرجع قيمة * 3; }}## المثال الكامل
```knoz// سمة للحسابسمة قابل_للحساب { دالة قيمة(&ذاتي) -> ص64;}
// هيكل نقطةهيكل نقطة { س: ص64, ص: ص64,}
نفذ قابل_للحساب لـ نقطة { دالة قيمة(&ذاتي) -> ص64 { أرجع ذاتي.س + ذاتي.ص; }}
// هيكل عدادهيكل عداد { قيمة: ص64,}
نفذ قابل_للحساب لـ عداد { دالة قيمة(&ذاتي) -> ص64 { أرجع ذاتي.قيمة * 2; }}
دالة رئيسية() -> صحيح { اطبع("=== السمات ===");
// إنشاء نقطة دع نق = نقطة { س: 10, ص: 20 }; اطبع("مجموع النقطة (10+20): "); اطبع_صحيح(نق.قيمة());
// إنشاء عداد دع عد = عداد { قيمة: 50 }; اطبع("ضعف العداد (50*2): "); اطبع_صحيح(عد.قيمة());
// مجموع القيم دع مجموع = نق.قيمة() + عد.قيمة(); اطبع("المجموع الكلي: "); اطبع_صحيح(مجموع);
أرجع 0;}