در این بخش از مقاله آموزش کاتلین، از عبارت continue برای پرش و رد شدن از تکرار کنونی حلقه استفاده میکنیم. ضمناً در این بخش از مقاله با برچسبهای continue نیز آشنا خواهیم شد.
فرض کنید مشغول کار روی حلقهها هستید. برخی اوقات لازم میشود که تکرار کنونی حلقه را رد کنیم. در یک چنین حالتی، از عبارت continue استفاده میکنیم. سازه continue موجب میشود که تکرار کنونی درون حلقه رد شود (اجرا نمیشود) و کنترل برنامه به انتهای بدنه حلقه منتقل میشود.
طرز کار continue چگونه است؟
عبارت continue تقریباً همیشه همراه با سازه if…else استفاده میشود. به مثال زیر توجه کنید:
while (testExpression1) {
// codes1 if (testExpression2) { continue } // codes2
}
اگر مقدار testExpression2 به صورت true ارزیابی شود، سازه continue اجرا میشود و همه کدهای درون حلقه while برای آن دفعه تکرار رد میشود (اجرا نخواهد شد و به گام بعدی تکرار میرود).
مثالی از continue در کاتلین
fun main(args: Array<String>) {
for (i in 1..5) { println("$i Always printed.") if (i > 1 && i < 5) { continue } println("$i Not always printed.") }
}
خروجی کد فوق به صورت زیر است:
1 Always printed. 1 Not always printed. 2 Always printed. 3 Always printed. 4 Always printed. 5 Always printed. 5 Not always printed.
زمانی که مقدار i بزرگتر از 1 و کمتر از 5 باشد، continue اجرا میشود که موجب اجرا نشدن گزاره زیر میشود:
println("$i Not always printed.")
با این حال گزاره زیر در هر تکرار حلقه اجرا میشود، زیرا این گزاره پیش از سازه continue قرار دارد:
println("$i Always printed.")
مثالی از محاسبه مجموع صرف اعداد مثبت
برنامه زیر مجموع حداکثر 6 عدد را که از سوی کاربر وارد میشوند، محاسبه میکند. اگر کاربر عدد منفی یا صفر وارد کند، از محاسبه صرفنظر میشود.
fun main(args: Array<String>) {
var number: Int var sum = 0
for (i in 1..6) { print("Enter an integer: ") number = readLine()!!.toInt()
if (number <= 0) continue sum += number } println("sum = $sum")
}
خروجی کد فوق به صورت زیر است:
Enter an integer: 4 Enter an integer: 5 Enter an integer: -50 Enter an integer: 10 Enter an integer: 0 Enter an integer: 12 sum = 31
Continue برچسبدار در کاتلین
هر آنچه تا کنون در خصوص continue گفتیم به شکل بدون برچسب آن مربوط میشد. این نوع از سازه continue از اجرای تکرار جاری نزدیکترین حلقه محصور جلوگیری میکند. اما میتوان از continue برای رد شدن از تکرار هر حلقه مورد نظر (و نه لزوماً نزدیکترین حلقه) استفاده کرد. بدین منظور باید از برچسبهای continue استفاده کنیم.
طرز کار continue برچسبدار چگونه است؟
برچسبها در کاتلین با یک شناسه آغاز میشوند و سپس کاراکتر @ میآید. در برنامه زیر از برچسب @outerloop استفاده میکنیم که حلقه while بیرونی را نشانهگذاری میکند. اینک با استفاده از continue به همراه برچسب continue@outerloop میتوانید از اجرای کدهای یک حلقه خاص برای آن دفعه تکرار جلوگیری کنید.
مثالی از continue برچسبدار
fun main(args: Array<String>) {
here@ for (i in 1..5) { for (j in 1..4) { if (i == 3 || j == 2) continue@here println("i = $i; j = $j") } }
}
خروجی کد فوق به صورت زیر است:
i = 1; j = 1 i = 2; j = 1 i = 4; j = 1 i = 5; j = 1
استفاده از continue برچسبدار غالباً توصیه نمیشود، زیرا موجب دشواری درک کد میشود. اگر در موقعیتی هستید که مجبور به استفاده از continue برچسبدار هستید، میتوانید کد خود را با تلاش برای یافتن روش متفاوتی که خوانایی بیشتری داشته باشد، «بازسازی» (refactor) کنید.
در بخش بعدی به بررسی آخرین عبارت پرشی کاتلین یعنی return میپردازیم.