محتويات الدورة

Rust / الأساسي / الدرس 2

الأنواع والتعبيرات وتدفق التحكم

مثّل القيم بوعي واختر سياسات الحساب وحوّل متطلبات الحدود إلى تفرعات وحلقات تنتهي.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • استخدام الارتباطات الثابتة والتعديل والأنواع القياسية والصفوف.
  • شرح التفرعات المنتجة للقيم وحدود الحلقات.
  • استخدام الحساب المفحوص بدل افتراض سلوك فيض مرتبط بالبناء.

الارتباط يسمّي قيمة محددة النوع

تنشئ let ارتباطًا ثابتًا افتراضيًا، وتتيح mut الإسناد أو التعديل عبره إذا دعمه النوع. ينشئ حجب الاسم ارتباطًا جديدًا قد يغيّر النوع، بخلاف الإسناد إلى متغيّر قائم. تحدد الأنواع الصحيحة الإشارة والعرض، ويطابق usize حجم فضاء عناوين الهدف ويستخدم للفهارس غالبًا. تمثل bool الصواب والخطأ وchar قيمة Unicode قياسية. اختر النوع وفق المجال المقبول والتنسيق الخارجي بدل افتراض أن كل كمية تحتاج عددًا بحجم المؤشر.

اختيار سلوك الفشل قبل الحساب

تحذف القسمة الصحيحة الجزء الكسري، فلا يعيده تحويل خارجها لاحقًا إلى نوع عشري. حوّل المعاملات قبل القسمة إن أردت كسرًا وافحص عدم انعدام المقام. قد يسبب الفيض العادي panic عند تفعيل الفحص ويلتف عند تعطيله، فلا تجعل إعداد البناء يحدد سلوك التطبيق. تعيد checked_add قيمة Option لمعالجة متسقة. وتعبّر wrapping_add وsaturating_add وoverflowing_add عن سياسات مختلفة مقصودة. للحساب العشري مسائل دقة وتقريب منفصلة لا تحلها فحوص الفيض الصحيح.

rust خارج وبقية وفشل مفحوص
fn main() {
    let pages: u32 = 11;
    let readers: u32 = 4;
    println!("{} {}", pages / readers, pages % readers);
    println!("{}", u8::MAX.checked_add(1).is_none());
}
الناتج المتوقع
2 3
true

يتوزع أحد عشر إلى اثنين لكل طرف مع بقية ثلاثة. تعيد زيادة أقصى u8 واحدًا None بدل قيمة التفاف تعتمد على إعداد البناء.

التفرعات تقسّم المجال المقبول

تتطلب if شرطًا منطقيًا ولا تعتبر الأعداد اعتباطيًا قيم صواب. يستطيع تعبير if إنتاج قيمة إذا توافق نوعا الفرعين. افحص الإدخال غير الصالح قبل التصنيف كي لا تجتاز درجة خارج المجال حد النجاح. تختصر && و|| التقييم فتسمحان بحارس قبل عملية تعتمد عليه. أبعد الآثار الجانبية عن الشروط المعقدة لتسهيل المراجعة. ستجعل match البدائل المحدودة شاملة لاحقًا، وتبقى if مفيدة للمناطق العددية المرتبة ذات حدود المساواة الواضحة.

شرح الحلقة بخاصية ثابتة

تزور for على 1..=4 الأعداد من واحد إلى أربعة شاملة الطرفين، بينما تستبعد 1..4 الأربعة. قبل كل دورة في المثال الثاني تساوي total مجموع القيم المزارة، وتحافظ إضافة next على الخاصية. عند انتهاء النطاق المحدود تكون النتيجة عشرة. تناسب while شرطًا متغيرًا، وتستمر loop حتى break التي يمكنها حمل قيمة. حدّد التقدم والانتهاء قبل استخدام حلقة بإدخال خارجي، خاصة إذا أبقى الإدخال الفاسد الحالة كما هي.

rust مجموع محدود وقرار ينتج قيمة
fn main() {
    let mut total = 0u32;
    for next in 1..=4 { total += next; }
    let label = if total >= 10 { "ready" } else { "wait" };
    println!("{total} {label}");
}
الناتج المتوقع
10 ready

تنتج أربع إضافات عشرة. يعيد الفرعان شريحتي نص، وتختار المساواة ready.

تجميع القيم دون إخفاء المتطلبات

تجمع الصفوف عددًا ثابتًا من أنواع قد تختلف، وتحتوي المصفوفة عددًا ثابتًا من نوع واحد. يمنح التفكيك الحقول أسماء محلية واضحة. تشترط Rust التهيئة قبل القراءة لكنها لا تثبت انتماء القيمة لمجال التطبيق. قد تقطع تحويلات as القيمة أو تغير معناها؛ فضّل TryFrom عند وجوب الرفض. اختبر الصفر والقيم القصوى والحدود وجيرانها. قد يترجم التعبير ويطبّق وحدة أو تقريبًا أو حد قبول خاطئًا، فأبقِ اختبارات المجال صريحة.

الأخطاء الشائعة وإصلاحها

شرط تفرع يستخدم عددًا مباشرة.

لماذا يحدث؟
تتوقع Rust نوع bool ولا تستنتج الصواب العددي.
كيف تصلحه؟
اكتب مقارنة صريحة مثل count != 0.
كيف تتجنب تكراره؟
عبّر عن شرط المجال بالكلمات قبل البرمجة.

تغير سلوك الفيض بين البناءات.

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

تجاوز العنصر الأخير.

لماذا يحدث؟
استخدم نطاق يستبعد النهاية بدل تضمينها.
كيف تصلحه؟
اختر ..= أو عدّل الحد عن قصد.
كيف تتجنب تكراره؟
تتبّع أول تكرار وآخره والحالة الفارغة.

اختبر فهمك

1. وزّع سبعة عشر عملًا على خمسة عمال. أعط الخارج والبقية ثم صف الحساب الكسري دون محاولة تغيير القسمة الصحيحة لاحقًا.

اعرض الحل المشروح

الخارج ثلاثة والبقية اثنان. للمتوسط الكسري حوّل البسط أو المعاملين إلى f64 قبل القسمة فتعطي 3.4 وفق التمثيل العشري. تحويل الخارج الصحيح يعطي 3.0. افحص المقام قبل تعميم الحساب على عدد عمال من المستخدم.

2. توقّع المثال الثاني مع 1..4 بدل 1..=4. حدّد الخاصية الثابتة وفسّر تغير التسمية.

اعرض الحل المشروح

تُزار واحد واثنان وثلاثة فقط، فيصبح المجموع ستة والسطر 6 wait. تبقى الخاصية أن total مجموع العناصر المزارة؛ تغير عقد النطاق فقط. يميّز ذلك حلقة صحيحة على نطاق خاطئ من خطوة تجميع مكسورة. أضف نطاقًا فارغًا لفحص الصفر الابتدائي.

أهم ما تعلمته

  • الأنواع وسياسات الحساب قراران منفصلان.
  • حدّد المساواة وأطراف النطاق بوعي.
  • فسّر السلوك بالخصائص الثابتة واختبارات الحدود.

المراجع الرسمية