Learn Rust Coding · درس

قواعد الحذف

متى تُستنتج أعمار الاقتراض

الدرس 4 من 413 خطوة

قواعد الحذف درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

مدد عمرية لا تكتبها

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

الحذف التلقائي مجرد اختصار

لا يلغي الحذف التلقائي المدد العمرية؛ فما زال المصرّف يملؤها خلف الكواليس باستخدام عدة قواعد حتمية. وعندما تغطي القواعد حالتك، يمكنك حذف التعليقات.

دالة ذات مدد محذوفة تلقائيًا

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

fn first_word(s: &str) -> &str {
    s.split(' ').next().unwrap_or("")
}

fn main() {
    let phrase = String::from("rust is fun");
    println!("{}", first_word(&phrase));
}

القاعدة 1: لكل مُدخل مدة خاصة به

القاعدة الأولى: تحصل كل مدة عمرية محذوفة تلقائيًا في المعاملات على مدة مميزة. ويحصل معاملا المرجعية على مدتين منفصلتين.

القاعدة 2: مُدخل واحد، ومُخرج واحد

القاعدة الثانية: إذا وُجدت مدة عمرية واحدة بالضبط في المُدخلات، تُسند إلى جميع مدد المخرجات. وينطبق ذلك على دوال مثل first_word التي تستقبل مرجعية واحدة وتُرجعها.

fn trim_start(s: &str) -> &str {
    s.trim_start()
}

fn main() {
    println!("[{}]", trim_start("   hi"));
}

القاعدة 3: الأساليب و&self

القاعدة الثالثة: إذا احتوى أسلوب على &self أو &mut self، تُسند مدة self العمرية إلى جميع مدد المخرجات. ولهذا نادرًا ما تحتاج الأساليب إلى تعليقات.

struct Holder { value: String }

impl Holder {
    fn get(&self) -> &str {
        &self.value
    }
}

fn main() {
    let h = Holder { value: String::from("stored") };
    println!("{}", h.get());
}

متى يفشل الحذف التلقائي

إذا ظلت أي مدة عمرية للمخرجات غير معروفة بعد تطبيق القواعد الثلاث كلها، يطلب منك المصرّف تحديدها صراحةً. وتُعد دالة longest الحالة الكلاسيكية: مُدخلان وخرج غامض.

دالة longest مرة أخرى

هناك مُدخلان مرجعيان ومُخرج مرجعي واحد: لا تنطبق القاعدة 2، لوجود أكثر من مُدخل، ولا يوجد self. لذلك يجب عليك إضافة التعليق.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    println!("{}", longest("abcd", "ab"));
}

مُدخلات متعددة، ومُخرج من self

يحصل الأسلوب الذي يملك عدة معاملات على مدة المخرج العمرية من self وفقًا للقاعدة 3، حتى مع وجود معاملات مرجعية أخرى.

struct Doc { body: String }

impl Doc {
    fn announce(&self, _note: &str) -> &str {
        &self.body
    }
}

fn main() {
    let d = Doc { body: String::from("content") };
    println!("{}", d.announce("ping"));
}

سبب وجود القواعد

تغطي هذه القواعد الثلاث الغالبية العظمى من الشيفرات البرمجية الواقعية، ولذلك لا تحتاج معظم الدوال إلى صياغة أعمار على الإطلاق. تكتبون التعليقات التوضيحية فقط عندما تكون النية غير واضحة فعلًا.

قائمة تحقق سريعة

لتحديد ما إذا كان الحذف ينطبق، اسألوا:

  • هل توجد مرجعية إدخال واحدة بالضبط؟ عندها يستعير الإخراج منها.
  • هل توجد &self؟ عندها يستعير الإخراج من self.
  • خلاف ذلك، أضيفوا التعليقات التوضيحية صراحةً.

تحقق سريع

اختبروا مدى فهمكم لقواعد الحذف.

مراجعة

لقد تعلمتم متى تُستنتج الأعمار:

  • القاعدة 1: تحصل كل مرجعية إدخال على عمر خاص بها
  • القاعدة 2: يُطابق عمر إدخال واحد جميع المخرجات
  • القاعدة 3: توفّر &self عمر الإخراج في الأساليب
  • إذا ظلت المخرجات غامضة، فأضيفوا التعليقات التوضيحية صراحةً
البدء مجانًا

تعلم Rust مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
39
الدروس
144

الأسئلة الشائعة

هل درس «قواعد الحذف» مجاني؟

نعم — نص درس «قواعد الحذف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «قواعد الحذف»؟

متى تُستنتج أعمار الاقتراض تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «قواعد الحذف»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا نستخدم أعمار الاقتراض
  2. تعليقات أعمار الاقتراض
  3. أعمار الاقتراض في Structs
  4. قواعد الحذف
← العودة إلى Learn Rust Coding