هيكل الصفوف

إذا كانت أسماء الحقول غير مهمة، يمكنك استخدام هيكل الترتيب (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.