قلل من أثر كود الصدأ وزد من متانته مع الأنواع العامة.

هناك دائمًا مستويات من عدم اليقين أثناء تطوير التطبيقات ، مما قد يؤدي إلى حدوث أخطاء ، خاصةً إذا كانت وظائفك تقبل أنواعًا معينة من الوسائط. لتقليل الأخطاء الناتجة عن عدم اليقين ، يمكنك استخدام Generics. توفر Generics وظائف لإنشاء الفئات والوظائف وهياكل البيانات للعمل مع أنواع مختلفة.

باستخدام الأدوية الجنيسة ، يمكنك إنشاء وتعريف الخوارزميات وهياكل البيانات التي يمكن أن تعمل على أنواع متعددة دون كتابة تعليمات برمجية معقدة وعمليات تنفيذ منفصلة لكل نوع. تعمل العوامل الوراثية على تحسين قابلية إعادة استخدام الكود والكفاءة مع الحفاظ على أمان النوع والأداء.

استخدام الأنواع العامة في الصدأ

يمكن أن يتفاعل نوع Rust العام مع أنواع بيانات الصدأ الأخرى. ستحدد الأنواع العامة بأقواس زاوية (<>) ، متبوعة بمعلمتين أو أكثر.

هنا عام تعريف الهيكل يأخذ معلمتين عامتين:

هيكلنقطة {
// T و U هما معلمتان من النوع العام سيفعلهما حقلا x و y
// تفترض على إنشاء مثيل
س: تي ،
ص: يو ،
}

في ال نقطة هيكل تي ، و يو معلمات نوع عامة.

يمكنك استبدال معلمات النوع العام بأي نوع بيانات عند إنشاء مثيل:

instagram viewer
الجبهة الوطنيةرئيسي() {
يترك my_point = النقطة {x: خيط::من("مرحبًا") ، ص: خيط::من("عالم") };

println!(
"قيمة x لـ my_point هي {} وقيمة y هي {}.",
my_point.x ،
my_point.y
);
}

ال وجهة نظري المتغير هو مثيل لـ نقطة تم تهيئة الهيكل بأنواع السلاسل. يستنتج مترجم الصدأ الأنواع الخرسانية لـ تي و يو استنادًا إلى القيم الموجودة في إنشاء مثيل لها.

حدود السمات للأنواع العامة

يمكن أن تستخدم أنواع الصدأ العامة حدود السمات لضمان سلامة النوع. السمات عبارة عن مجموعات من الأساليب التي يمكن للأنواع تنفيذها لإظهار سلوكيات معينة محددة للسمة.

تحدد حدود السمات أن النوع العام يجب أن ينفذ سمة واحدة أو أكثر.

في ما يلي مثال على دالة عامة تُرجع أكبر قيمتين مع حد سمة تضمن أن الأنواع التي تمت مقارنتها تنفذ السمة:

// الحد الأقصى هو سمة تحدد طريقة لتقييم الحد الأقصى لاثنين
// أنواع
سمةأقصى {
الجبهة الوطنيةالأعلى(الذات، آخر: الذات) -> الذات;
}

// ينفذ سمة `الحد الأقصى` لجميع الأنواع التي تنفذ امتداد
// سمة "PartialOrd".
ضمنيجزئي> الحد الأقصى ل تي {
الجبهة الوطنيةالأعلى(الذات، آخر: الذات) -> الذات {
// إرجاع "self" إذا كانت أكبر من "other" ؛ خلاف ذلك ، العودة
// `other.`
لوالذات > أخرى {
الذات
} آخر {
آخر
}
}
}

الجبهة الوطنيةرئيسي() {
يترك أ = 5;
يترك ب = 10;
يترك أكبر = الحد الأقصى:: ماكس (أ ، ب) ؛
println!("القيمة الأكبر هي {}"، أكبر)؛
}

ال أقصى السمة لها الأعلى طريقة تُرجع أكبر قيمتين من نفس النوع. أي نوع يقوم بتنفيذ جزئي السمة تنفذ أقصى سمة.

ال الأعلى تأخذ الطريقة قيمتين من الذات النوع - يشير إلى النوع الذي يقوم بتنفيذ أقصى سمة — ويقارن القيم.

ال رئيسي تقارن الدالة بين متغيرين باستخدام الأعلى طريقة ويطبع أكبر.

قيود الأنواع العامة

تتشابه القيود مع حدود السمات ، ولكنها تسمح لك بتحديد متطلبات إضافية للأنواع التي تستخدمها كمعلمات نوع.

إذا كنت ترغب في إنشاء وظيفة عامة تقبل أنواعًا لتحويل السلسلة ، فيمكنك استخدام قيد للتأكد من أن معلمة النوع تنفذ سمة.

// ToString هي سمة ذات طريقة تحويل سلسلة
سمةإلى سلسلة {
الجبهة الوطنيةإلى سلسلة(&الذات) -> خيط;
}

// to_string هي وظيفة عامة تأخذ قيمة من أي نوع
// تنفذ سمة ToString
الجبهة الوطنيةإلى سلسلةإلى سلسلة> (القيمة: T) -> خيط {
value.to_string ()
}

ال إلى سلسلة يجب أن تقوم معلمة القيمة بتطبيق إلى سلسلة سمة ، والتي تضمن أنه يمكنك تحويل قيم الكتابة تي للتوتير مع إلى سلسلة طريقة.

الأنواع العامة مفيدة للعمل مع السمات

أنواع الصدأ العامة قوية ، وهناك مجالات للتحسين. مجال التركيز الحاسم هو تحسين أداء الكود العام. حاليًا ، يمكن لنظام Rust أن يفرض عبئًا على الكود العام ، مما يؤدي إلى إبطاء الأداء.

الأنواع العامة مفيدة للعمل مع السمات. باستخدام الأنواع العامة ، يمكنك إنشاء كائنات سمة تعمل مع أي نوع يطبق سمة لجعل طريقتك أكثر مرونة.