0Pricing
C++ Academy · درس

العودة المبكرة وbreak وcontinue وgoto

أعد هيكلة الشروط المتداخلة باستخدام العودة المبكرة، واستخدم break وcontinue وgoto بحذر.

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

هرم العذاب

يصعب قراءة الشروط المتداخلة بعمق. وتعمل عمليات الإرجاع المبكر على تسطيح البنية بدرجة كبيرة.

// Pyramid
int process(int n) {
    if (n >= 0) {
        if (n < 100) {
            if (isValid(n)) {
                return compute(n);
            }
        }
    }
    return -1;
}

إعادة الهيكلة باستخدام الإرجاع المبكر

اخرج فور فشل شرط مسبق. فكل عبارة حراسة عبارة عن سطر واحد مستقل.

int process(int n) {
    if (n < 0)      return -1;
    if (n >= 100)   return -1;
    if (!isValid(n)) return -1;
    return compute(n);
}

عبارات الحراسة

عبارة الحراسة ترفض الإدخال غير الصالح في بداية الدالة. وتجعل المسار المعتاد الواضح ظاهرًا.

break في الحلقات

اخرج من الحلقة عندما تجد ما تبحث عنه، أو عندما يجعل خطأ ما الاستمرار بلا فائدة.

continue: تخطي بقية الجسم

استخدم continue لتخطي الحالات غير المنطبقة، دون تداخل بقية الجسم.

for (auto& item : items) {
    if (item.skipped) continue;
    process(item);
}

الخروج من الحلقات المتداخلة

لا يخرج break إلا من مستوى واحد. وللخروج من مستويات متعددة، استخدم متغيرًا منطقيًا، أو أعد الهيكلة داخل دالة، أو استخدم goto كحل أخير.

bool found = false;
for (int i = 0; i < n && !found; ++i) {
    for (int j = 0; j < m; ++j) {
        if (grid[i][j] == target) {
            found = true;
            break;
        }
    }
}

تعليمة goto

ورثت C++ تعليمة goto من C. ونادرًا ما تحتاج إليها الشيفرة الحديثة — لكن لها استخدامًا مشروعًا واحدًا: القفز خارج الحلقات المتداخلة أو مسارات معالجة الأخطاء.

for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
        if (error_condition) goto cleanup;
    }
}

cleanup:
free_resources();

لماذا لا يُنصح باستخدام goto؟

تجعل القفزات العشوائية تدفق التحكم صعب التتبع. ابدأ بإعادة الهيكلة أو استخدام المتغيرات المنطقية. واحصر استخدام goto في مسارات التنظيف النادرة في الشيفرة منخفضة المستوى.

إزالة goto بإعادة الهيكلة

يمكن استبدال معظم استخدامات goto بما يلي:

  • استخراج الكتلة الداخلية إلى دالة
  • استخدام متغير منطقي
  • إلقاء استثناء والتقاطه

return في المدمّرات

لا يمكنك الإرجاع مبكرًا من مدمّر باستخدام return; في بدايته — فالمدمّرات لا تعيد قيمًا. لكن يمكنك تنظيمها باستخدام شروط مبكرة لتخطي العمل.

أسلوب الخروج الوحيد (قديم)

كانت الشيفرة القديمة تستخدم أحيانًا return واحدًا في النهاية ومتغيرًا للنتيجة. أما C++ الحديثة فتفضّل عمليات الإرجاع المبكر المتعددة للوضوح. وتتولى RAII التنظيف تلقائيًا.

تحقق سريع

أي تقنية لتدفق التحكم تستبدل سلاسل if-else المتداخلة داخل الدالة بأكبر قدر من النظافة؟

مراجعة

استخدم عمليات الإرجاع المبكر كعبارات حراسة، وbreak وcontinue باعتدال لتوضيح النية، وgoto فقط للخروج النادر من الحلقات المتداخلة أو مسارات التنظيف. الهدف هو تدفق تحكم واضح ومسطّح.

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

هل درس «العودة المبكرة وbreak وcontinue وgoto» مجاني؟

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

ماذا ستتعلم في «العودة المبكرة وbreak وcontinue وgoto»؟

أعد هيكلة الشروط المتداخلة باستخدام العودة المبكرة، واستخدم break وcontinue وgoto بحذر. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

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

كم من الوقت يستغرق درس «العودة المبكرة وbreak وcontinue وgoto»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

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

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

  1. التفرّع: if-else و ternary و switch-case
  2. أنماط الحلقات: for وwhile وdo-while
  3. حلقة for المعتمدة على النطاق مع الحاويات
  4. العودة المبكرة وbreak وcontinue وgoto
← العودة إلى C++ Academy