0Pricing
Java Academy · درس

‏break مع تسمية

اخرج من الحلقات الخارجية بسلاسة

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

مشكلة الحلقات المتداخلة

تخرج break العادية من الحلقة الداخلية فقط، لكنكم قد ترغبون غالبًا في مغادرة الحلقتين معًا.

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

تحل Java هذه المشكلة باستخدام break ذات تسمية.

ما التسمية؟

التسمية هي اسم تلحقونه بحلقة، ويتبعه نقطتان.

فعلى سبيل المثال، تؤدي outer: الموضوعة مباشرة قبل حلقة for إلى تسمية تلك الحلقة باسم "outer".

لا تؤدي التسميات أي وظيفة بمفردها، لكنها تصبح مفيدة عند استخدامها مع break أو continue.

outer:
for (int i = 0; i < 3; i++) {
    // 'outer' is now a name for this loop
}

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

اكتبوا اسم التسمية بعد الكلمة المفتاحية break: break outer;

يخبر ذلك Java بالقفز خارج الحلقة المسماة outer، حتى عند تنفيذ التعليمة من داخل حلقات متداخلة بعمق.

تتوقف الحلقتان الداخلية والخارجية فورًا.

break outer;  // exits the loop labeled 'outer'

تطبيق break ذات التسمية

نبحث هنا في شبكة بحجم 3x3. عندما نعثر على col 2 في الصف 2، نستخدم break للخروج من الحلقة الخارجية.

يوقف ذلك الحلقتين معًا، بخلاف break العادية.

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 (row == 2 && col == 2) {
                    System.out.println("Found at " + row + "," + col);
                    break outer;
                }
            }
        }
        System.out.println("Search over");
    }
}

لماذا أوقفت كل شيء؟

كانت المخرجات "وُجدت عند 2,2" ثم "انتهى البحث".

بما أننا استخدمنا break outer، انتهت الحلقتان معًا، ولم تتم زيارة الصف 3 مطلقًا.

أما break العادية فكانت ستتابع إلى الصف 3 بعد مغادرة الحلقة الداخلية وحدها.

مقارنة نوعَي break

انظروا إلى الشبكة نفسها مع استخدام break عادية بدلًا من ذلك.

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

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

البحث في مصفوفة ثنائية الأبعاد

من حالات الاستخدام الواقعية العثور على قيمة مستهدفة داخل مصفوفة.

بمجرد تحديد موقع القيمة، تنهي break ذات التسمية البحث بأكمله بشكل واضح.

public class Main {
    public static void main(String[] args) {
        int[][] grid = {{1, 2}, {3, 9}, {5, 6}};
        int target = 9;
        search:
        for (int r = 0; r < grid.length; r++) {
            for (int c = 0; c < grid[r].length; c++) {
                if (grid[r][c] == target) {
                    System.out.println("At row " + r + " col " + c);
                    break search;
                }
            }
        }
    }
}

يجب أن تكون التسمية على حلقة

تأتي التسمية مباشرة قبل الحلقة التي تسميها. لا يمكنكم استخدام break مع تسمية ليست على حلقة محيطة.

اختاروا أسماء واضحة مثل outer أو rows أو search حتى تُقرأ الشيفرة بصورة طبيعية.

تجنبوا الأسماء الغامضة مثل x: التي تخفي الغرض من الشيفرة.

ثلاثة مستويات من التداخل

تعمل التسميات أيضًا مع ثلاث حلقات متداخلة أو أكثر.

هنا تقفز break ذات التسمية مباشرة خارج الحلقات الثلاث كلها عند تحقق شرط معين.

public class Main {
    public static void main(String[] args) {
        done:
        for (int a = 1; a <= 2; a++) {
            for (int b = 1; b <= 2; b++) {
                for (int c = 1; c <= 2; c++) {
                    if (a + b + c == 4) {
                        System.out.println(a + "," + b + "," + c);
                        break done;
                    }
                }
            }
        }
    }
}

متى تكون break ذات التسمية مفيدة؟

تكون break ذات التسمية مفيدة جدًا عندما يتعين عليكم التخلي عن عدة حلقات فور العثور على نتيجة.

فهي تتجنب متغيرات الإشارات الإضافية مثل boolean found التي يتم التحقق منها عند كل مستوى.

وعند استخدامها باعتدال، تحافظ على قِصر حلقات البحث ووضوحها.

استخدموها باعتدال

رغم قوتها، تجعل كثرة التسميات الشيفرة صعبة المتابعة.

استخدموا break ذات التسمية أساسًا في عمليات البحث المتداخلة الفعلية. أما في الحلقات البسيطة، فـ break العادية أوضح.

تظل سهولة القراءة هي الأولوية دائمًا.

تحقق سريع

حددوا ما الذي تفعله break ذات التسمية في الحلقات المتداخلة.

مراجعة

تسمّي التسمية حلقة، وتخرج break label; من الحلقة المسماة، متجاوزةً جميع الحلقات المتداخلة داخلها.

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

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

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

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

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

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

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

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

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

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

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

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

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

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