0Pricing
Java Academy · درس

‏continue مع تسمية

تابع حلقة خارجية

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

الانتقال إلى تكرار الحلقة الخارجية

تعيد continue العادية تشغيل الحلقة الداخلية فقط. لكنكم قد ترغبون أحيانًا في الانتقال إلى التكرار التالي للحلقة الخارجية بدلًا من ذلك.

لهذا الغرض، توفر Java تعليمة continue ذات تسمية.

تربط هذه التعليمة تسمية الحلقة بالكلمة المفتاحية continue للتحكم في الحلقة التي تنتقل إلى تكرارها التالي.

صيغة continue ذات التسمية

الصيغة هي continue label;، حيث تشير التسمية إلى حلقة محيطة.

بدلًا من دفع الحلقة الداخلية إلى الأمام، تقفز التعليمة إلى التكرار التالي للحلقة ذات التسمية.

يتم تخطي كل ما تبقى من الحلقة الداخلية في ذلك التكرار.

continue outer;  // jump to next iteration of 'outer'

مثال أول

هنا، عندما تساوي col القيمة 2، نستخدم continue للحلقة الخارجية.

يؤدي ذلك إلى التخلي عن بقية الحلقة الداخلية والانتقال فورًا إلى الصف التالي.

public class Main {
    public static void main(String[] args) {
        outer:
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (col == 2) {
                    continue outer;
                }
                System.out.println("row " + row + ", col " + col);
            }
        }
    }
}

قراءة المخرجات

طبع كل صف col 1 فقط. وعندما وصلت col إلى 2، قفزت continue outer مباشرة إلى الصف التالي.

لم تتم طباعة العمودين 2 و3 لأي صف.

أُعيد تشغيل الحلقة الداخلية بدءًا من col 1 في كل صف جديد.

continue مقابل continue ذات التسمية

قارنوا ذلك باستخدام continue عادية؛ إذ كانت ستتخطى col 2 فقط، ثم تطبع col 3 أيضًا.

شغّلوا هذا المثال ولاحظوا ظهور col 1 وcol 3 معًا في كل صف.

public class Main {
    public static void main(String[] args) {
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (col == 2) {
                    continue;
                }
                System.out.println("row " + row + ", col " + col);
            }
        }
    }
}

الفرق الأساسي

تتخطى continue العادية التكرار الداخلي الحالي فقط، لذلك تواصل الحلقة الداخلية عملها.

أما continue outer ذات التسمية فتتخلى عن الحلقة الداخلية بأكملها وتعيد تشغيل التكرار التالي للحلقة الخارجية.

تغيّر تلك التسمية الواحدة مقدار الشيفرة التي يتم تخطيها.

تخطي صف كامل

تكون continue ذات التسمية مفيدة عندما تجعل قيمة سيئة بقية التكرار الداخلي غير صالحة.

هنا، إذا كان أي عدد في الصف سالبًا، نتخطى بقية العمل الخاص بذلك الصف وننتقل إلى الصف التالي.

public class Main {
    public static void main(String[] args) {
        int[][] data = {{1, 2, 3}, {4, -1, 6}, {7, 8, 9}};
        rows:
        for (int r = 0; r < data.length; r++) {
            int sum = 0;
            for (int c = 0; c < data[r].length; c++) {
                if (data[r][c] < 0) {
                    System.out.println("Row " + r + " skipped");
                    continue rows;
                }
                sum += data[r][c];
            }
            System.out.println("Row " + r + " sum = " + sum);
        }
    }
}

تتبّع ذلك المثال

طبع الصفان 0 و2 مجموعيهما. أما الصف 1 فواجه قيمة سالبة، وطبع "تم تخطي الصف 1"، ثم انتقل إلى الصف التالي.

ومن المهم أن سطر مجموع الصف 1 لم يُنفَّذ مطلقًا، لأن continue ذات التسمية تخطته.

تصفية الأزواج

ومن الاستخدامات الأخرى تخطي عنصر خارجي كامل لحظة فشل أحد الشروط الداخلية.

تطبع هذه الحلقة أزواجًا، لكنها تتخطى أي قيمة i إذا كان حاصل ضربها في j سيتجاوز 6.

public class Main {
    public static void main(String[] args) {
        loopI:
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (i * j > 6) {
                    continue loopI;
                }
                System.out.println(i + " x " + j + " = " + (i * j));
            }
        }
    }
}

أسماء التسميات ومواضعها

يجب أن تحيط الحلقة ذات التسمية بتعليمة continue. لا يمكنكم متابعة تسمية ليست أعلى من التعليمة.

اختاروا أسماء وصفية مثل rows أو loopI حتى يعرف القارئ أي حلقة ستنتقل إلى تكرارها التالي.

التسمية الواضحة تُعد توثيقًا بحد ذاتها.

متى تفيد ومتى تضر؟

تفيد continue ذات التسمية عندما ينبغي لشرط ما أن يلغي بقية التكرار الداخلي وينقل التنفيذ إلى الأمام.

لكن الإفراط في استخدام التسميات يجعل تتبع مسار التنفيذ صعبًا. إذا كانت continue العادية أو الإرجاع المبكر من الدالة يقدمان قراءة أبسط، ففضّلوهما.

استخدموا التسميات فقط عندما توضّح المنطق فعلًا.

تحقق سريع

توقعوا تأثير continue ذات التسمية.

مراجعة

تتخطى continue label; بقية الحلقة الداخلية، وتنقل الحلقة الخارجية المسماة إلى تكرارها التالي.

وهي تختلف عن continue العادية التي تتخطى تكرارًا داخليًا واحدًا فقط. استخدموا التسميات عندما تجعل منطق الحلقات المتعددة أوضح، لا لمجرد تقليل طول الشيفرة.

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

هل درس «‏continue مع تسمية» مجاني؟

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

ماذا ستتعلم في «‏continue مع تسمية»؟

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

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

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

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

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

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

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

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

  1. ‏break وcontinue
  2. ‏break مع تسمية
  3. ‏continue مع تسمية
  4. تجنّب تدفق الشيفرة المعقد
← العودة إلى Java Academy