آموزش زبان کاتلین – درس ۱۳ (continue)

نویسنده : سید ایوب کوکبی ۲۱ آبان ۱۳۹۷

آموزش زبان کاتلین – درس 13 (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.")
}
}

 

خروجی:

۱ Always printed.
۱ Not always printed.
۲ Always printed.
۳ Always printed.
۴ Always printed.
۵ Always printed.
۵ Not always printed.

 

وقتی مقدار i بیشتر از ۱ و کمتر از ۵ باشد عبارت continue اجرا شده و از دستور پایین که داخل حلقه قرار دارد چشم‌پوشی می‌شود:

println("$i Not always printed.")

 

با این حال دستور پایین به خاطر اینکه قبل از continue قرار دارد همیشه اجرا می‌شود:

println("$i Always printed.")

 

مثال: محاسبه مجموع اعداد مثبت

برنامۀ پایین حداکثر مجموع ۶ عدد مثبت ورودی توسط کاربر را محاسبه می‌کند. اگر کاربر مقادیر صفر یا منفی وارد کند، برنامه از آن‌ها چشم‌پوشی می‌کند:

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")
}

 

بخوانید  آموزش زبان کاتلین – درس 8 (شرط IF)

خروجی:

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 از ادامه‌ی دستورات صرفنظر کرده و اجرا را به ابتدای حلقۀ مادر که با برچسب outerloop مشخص شده ببرد. این قابلیت به ما اجرا می‌دهد تا اجرای کد را از حلقۀ مورد نظر پی بگیریم.

مثال:

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

 

البته در کاتلین و تمامی زبان‌های برنامه‌نویسی توصیه شده تا حد امکان از برچسب‌ها در برنامه استفاده نکنیم چرا که خوانایی کدها را به شدت کاهش می‌دهند. سعی کنید برچسب‌ها را حذف کرده و کد را به گونه‌ای ریفکتور کنید که نیازی به آن‌ها نباشد.

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *