هيكل الصفوف
إذا كانت أسماء الحقول غير مهمة، يمكنك استخدام هيكل الترتيب (tuple struct):
struct Point(i32, i32); fn main() { let p = Point(17, 23); println!("({}, {})", p.0, p.1); }
غالبًا ما يُستخدم هذا للأغلفة ذات الحقل الواحد (single-field wrappers) (تسمى newtypes):
struct PoundsOfForce(f64); struct Newtons(f64); fn compute_thruster_force() -> PoundsOfForce { todo!("اسأل عالم صواريخ في ناسا") } fn set_thruster_force(force: Newtons) { // ... } fn main() { let force = compute_thruster_force(); set_thruster_force(force); }
This slide should take about 10 minutes.
- الأنواع الجديدة (Newtypes) هي طريقة رائعة لترميز معلومات إضافية حول القيمة في نوع بدائي (primitive type)، على سبيل المثال:
- يتم قياس الرقم بوحدات معينة:
نيوتن
(Newtons) في المثال أعلاه. - القيمة اجتازت بعض التحقق عند إنشائها، لذلك لم تعد بحاجة إلى التحقق منها مرة أخرى في كل استخدام:
PhoneNumber(String)
أوOddNumber(u32)
.
- يتم قياس الرقم بوحدات معينة:
- أظهر كيفية إضافة قيمة
f64
إلى نوعNewtons
عن طريق الوصول إلى الحقل الفردي في النوع الجديد (newtype).- Rust عمومًا لا يحب الأشياء غير الواضحة، مثل فك التغليف التلقائي (automatic unwrapping) أو على سبيل المثال استخدام القيم المنطقية (booleans) كأعداد صحيحة (integers).
- يتم مناقشة التحميل الزائد للمشغل (Operator overloading) في اليوم الثالث (Day 3) (الأنواع العامة (generics)).
- المثال هو إشارة دقيقة إلى فشل Mars Climate Orbiter.