Kotlin Academy · درس

‏break وcontinue وعمليات الإرجاع المسمّاة

تحكّم في تدفق الحلقات باستخدام break وcontinue، واخرج من الحلقات المتداخلة باستخدام التسميات.

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

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

التحكم في تدفق الحلقات

تدعم Kotlin كلاً من break (الخروج من الحلقة) وcontinue (الانتقال إلى التكرار التالي) والوسوم للخروج من الحلقات المتداخلة.

أساسيات break

يخرج break فورًا من الحلقة الأقرب المحيطة به.

fun main() {
    for (i in 1..10) {
        if (i == 5) break
        print("$i ")
    }
    println() // 1 2 3 4
}

أساسيات continue

يتخطى continue بقية التكرار الحالي وينتقل إلى التكرار التالي.

fun main() {
    for (i in 1..10) {
        if (i % 2 == 0) continue
        print("$i ")
    }
    println() // 1 3 5 7 9
}

الحلقات ذات الوسوم

وسّم حلقة باستخدام label@ وأشر إليها من خلال break@label أو continue@label للتحكم في الحلقات الخارجية من داخل الحلقات المتداخلة.

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (i == 2 && j == 2) break@outer
            println("$i,$j")
        }
    }
}

استخدام continue مع وسم

استخدم continue@outer للانتقال إلى التكرار التالي لحلقة خارجية.

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (j == 2) continue@outer
            println("i=$i j=$j")
        }
    }
}

return@lambda

داخل forEach والدوال المضمّنة الأخرى، يؤدي return العادي إلى الخروج من الدالة المحيطة. استخدم return@forEach للخروج من دالة lambda فقط.

fun main() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach
        println(it)
    }
    println("Done")
}

return غير محلي في دوال lambda

إذا كانت دالة lambda مضمّنة (مثل forEach)، فإن return العادي يخرج من الدالة المحيطة بأكملها — وقد يكون ذلك مفاجئًا أحيانًا.

fun process() {
    listOf(1, 2, 3).forEach {
        if (it == 2) return // exits process()
        println(it)
    }
    println("never printed")
}
fun main() { process() }

وسم مخصص لدالة lambda

يمكنك وسم دالة lambda صراحةً باستخدام name@ لتحديد هدف الإرجاع بوضوح أكبر.

fun main() {
    listOf(1, 2, 3, 4).forEach loop@{
        if (it == 3) return@loop
        println(it)
    }
}

break في while

يعمل كل من break وcontinue بالطريقة نفسها في while وdo-while.

fun main() {
    var i = 0
    while (true) {
        if (i >= 3) break
        println("i = $i")
        i++
    }
}

الجمع بين الوسم وcontinue

تتيح لك الوسوم وcontinue تخطي تكرارات كاملة من الخوارزميات المتداخلة من دون استخدام متغيرات أعلام.

fun main() {
    val grid = listOf(listOf(1,2,0), listOf(3,4,5), listOf(0,6,7))
    rows@ for (row in grid) {
        for (cell in row) {
            if (cell == 0) continue@rows
            print("$cell ")
        }
        println()
    }
}

متى لا تستخدم الوسوم

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

fun firstMatch(grid: List<List<Int>>, target: Int): Pair<Int,Int>? {
    for (r in grid.indices) for (c in grid[r].indices) {
        if (grid[r][c] == target) return r to c
    }
    return null
}
fun main() {
    val g = listOf(listOf(1,2),listOf(3,4))
    println(firstMatch(g, 3))
}

تحقق سريع

كيف تخرج من الحلقة الخارجية من داخل حلقة داخلية في Kotlin؟

مراجعة

يخرج break من الحلقة الأقرب، بينما يتخطى continue التكرار الحالي وينتقل إلى التالي. استخدم label@ مع break@label أو continue@label للتحكم في الحلقات المتداخلة. وفي دوال lambda، فضّل return@forEach على return لتجنب الخروج غير المحلي.

البدء مجانًا

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

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

الدورات
51
الدروس
203

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

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

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

ماذا ستتعلم في «‏break وcontinue وعمليات الإرجاع المسمّاة»؟

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

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

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

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

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

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

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

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

  1. حلقة for على النطاقات والمجموعات
  2. while وdo-while: متى تستخدم كلًّا منهما
  3. forEach وrepeat وforEachIndexed
  4. ‏break وcontinue وعمليات الإرجاع المسمّاة
← العودة إلى Kotlin Academy