0Pricing
Swift Academy · درس

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

استخدم التسميات للخروج من مستويات حلقات متعددة.

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

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

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

for i in 1...3 {
    for j in 1...3 {
        if j == 2 { break }
        print(i, j)
    }
}

تحل break ذات التسمية المشكلة

أضيفوا تسمية إلى الحلقة الخارجية واستخدموا break outer للخروج من الحلقتين دفعةً واحدة.

outer: for i in 1...3 {
    for j in 1...3 {
        if i == 2 && j == 2 { break outer }
        print(i, j)
    }
}
print("escaped")

البحث في شبكة ثنائية الأبعاد

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

let grid = [[1, 2, 3], [4, 5, 6]]
var position = (-1, -1)
find: for r in 0..<grid.count {
    for c in 0..<grid[r].count {
        if grid[r][c] == 5 {
            position = (r, c)
            break find
        }
    }
}
print(position)

من دون تسميات: علامة

يمكن استخدام علامة منطقية كبديل عن التسميات، لكنه أكثر إسهابًا وعرضةً للأخطاء.

var stop = false
for i in 1...3 {
    for j in 1...3 {
        if i + j == 4 { stop = true; break }
        print(i, j)
    }
    if stop { break }
}

التسميات أوضح

مقارنةً بالعلامات، تعبّر break ذات التسمية عن القصد مباشرةً وتتجنب عمليات التحقق الإضافية بعد الحلقة الداخلية.

outer: for i in 1...3 {
    for j in 1...3 {
        if i + j == 4 { break outer }
        print(i, j)
    }
}

التداخل الثلاثي

تتوسع فائدة التسميات لتشمل ثلاثة مستويات أو أكثر؛ فاستهدفوا أي حلقة تريدون الخروج منها.

top: for a in 1...2 {
    for b in 1...2 {
        for c in 1...2 {
            if c == 2 { break top }
            print(a, b, c)
        }
    }
}

continue ذات التسمية في الحلقات المتداخلة

استخدموا continue label للانتقال إلى التكرار التالي لحلقة خارجية من داخل مستوى عميق.

rows: for r in 1...3 {
    for c in 1...3 {
        if c == 2 { continue rows }
        print(r, c)
    }
}

دمج كليهما

يمكنكم الجمع بين break وcontinue ذوي التسميات في البنية المتداخلة نفسها للتحكم بدقة.

scan: for i in 1...3 {
    for j in 1...3 {
        if j == 1 { continue }
        if i == 3 { break scan }
        print(i, j)
    }
}

أداء الخروج المبكر

يؤدي الخروج بمجرد العثور على الإجابة إلى تجنب التكرارات غير الضرورية في مجموعات البيانات الكبيرة.

let data = Array(1...100)
var firstBig = -1
loop: for chunk in stride(from: 0, to: data.count, by: 10) {
    for k in chunk..<min(chunk + 10, data.count) {
        if data[k] > 25 {
            firstBig = data[k]
            break loop
        }
    }
}
print(firstBig)

الإرجاع من دالة

داخل الدالة، يُعد return طريقة واضحة أخرى للخروج من جميع الحلقات دفعةً واحدة.

func findPair(_ target: Int) -> (Int, Int)? {
    for i in 1...5 {
        for j in 1...5 {
            if i * j == target { return (i, j) }
        }
    }
    return nil
}
print(findPair(12) ?? (-1, -1))

اختيار الأسلوب

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

outer: for x in 1...3 {
    for y in 1...3 {
        if x * y >= 4 { break outer }
        print(x, y)
    }
}

تحقق سريع

اختبروا التحكم في الحلقات المتداخلة.

مراجعة

تخرج break العادية من الحلقة الداخلية فقط. سمّوا الحلقة الخارجية واستخدموا break label للخروج من جميع المستويات دفعةً واحدة، فهذا أوضح من استخدام علامة منطقية. وداخل الدالة، يخرج return أيضًا من كل شيء.

outer: for i in 1...3 {
    for j in 1...3 {
        if j == 2 { break outer }
        print(i, j)
    }
}

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

هل درس «الخروج من الحلقات المتداخلة» مجاني؟

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

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

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

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

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

كم من الوقت يستغرق درس «الخروج من الحلقات المتداخلة»؟

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

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

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

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

  1. أساسيات break و continue
  2. العبارات ذات التسميات
  3. الخروج من الحلقات المتداخلة
  4. التحكم في الحلقات ضمن سياق switch
← العودة إلى Swift Academy