حلقه (loop) ها در کاتلین

حلقه ها در کاتلین
تعریف: برای تکرار یک عمل از حلقه استفاده میکنیم

به طور کلی سه نوع حلقه داریم. حلقه (loop) ها در کاتلین شامل for loop ، while loop و do-while loop است.

حلقه ی for

به دو روش میشه از حلقه ی for استفاده کرد.

روش foreach :

در کاتلین همه چیز object است دونستن این موضوع میتونه به درک بهتر حلقه ی for در کاتلین کمک کنه.

همین طور که گفتیم حلقه برای تکرار یک عمل مورد استفاده قرار میگیره روش foreach برای هر ابجکتی که تابع iterator براش تعریف شده باشه قابل استفاده است.

فرم کلی:

val myClass = MyClass(...) for(element in myClass){ //do some works with element ... }

عضو MyClass است. با for به ترتیب element هایی که myClass داره رو صدا میزنیم.

توجه:

نکته: element یک اسم دلخواهه و هر اسمی میتونه باشه

مثال:

خوندن اعضای ارایه با استفاده از روش foreach.

val myArray = arrayOf<Int>(22, 36, 74, 43, 55, 92) for(element in myArray) println(element)

مثال:

خوندن اعضای لیست با استفاده از روش foreach

val list = listOf<String>("Mary" ,"Peter", "Aida", "John") for(e in list){ println(e) }

در مثال بالا یک لیست داریم با چهارتا عضو. با استفاده از for اعضای list رو دونه دونه صدا میکنیم و در println نمایش میدیم.

روش index-based :

اگه با for بخوایم عمل تکرارو در محددوه ای از اعداد انجام بدیم به این روش index-based گفته میشه

مثال:

for(index in 0 until 100){ println(index) }

در مثال بالا برنامه اعداد 0 تا 99 رو نمایش میده. با هر تکرار یک واحد به index اضافه میشه تا به 100 برسه و حلقه متوقف بشه

حالا اگه بخوایم خود عدد 100 هم تو محدوده وجود داشته باشه مینویسیم:

for(index in 0..100){ println(index) }

حالا اگه بخوایم با هر تکرار به‌جای یک واحد دو یا چند واحد به index اضافه بشه مینویسیم:

for(index in 0 until 100 step 4) println(index)

در مثال بالا با هر تکرار 4 واحد به index اضافه میشه و به ترتیب اعداد 0، 4، 8 و... رو تا رسیدن به 100 و متوقف شدن حلقه نمایش میده.

اگه بخوایم index از بیشترین اعدد شروع بشه تا به کمترین عدد محدوده برسه مینویسیم:

for(index in 100 downTo 0) println(index)

مثال بالا حلقه از 100 شروع میکنه و تا رسیدن index به 0 عمل تکرار رو انجام میده.نتیجه در نمونه ی بالا میشه نمایش اعداد از 100 تا 0.

مثال:

حاصل جمع اعداد از 0 تا 100.

var sum = 0; for (num in 0..100){ sum += num; } println("Sum of 0 to 100 is $sum");

مثال:

مثال زیر یک عدد رو از کاربر میگیره و فاکتوریل آن را حساب کرده و نمایش میده.

Scanner input = new Scanner(System.in); System.out.print("Enter a number to compute factorial: "); var fact = input.nextInt(); print("$fact! is "); var result: Int = 1; for (index in fact downTo 1) { if (index > 1) print("$index * "); else System.out.print("$index = "); result *= index; } println(result);

مثال:

استفاده از روش index-based برای خوندن اعضای یک آرایه با for-loop

val myArray = arrayOf<Int>(22, 36, 74, 43, 55, 92) for(i in myArray.indices) println(myArray[i]

میتونید با کمک تابع withIndex در آرایه اعضای ارایه رو صدا بزنید و همزمان index هر عضو در ارایه هم داشته باشید.

val myArray = arrayOf<Int>(22, 36, 74, 43, 55, 92) for((index, element) in myArray.withIndex()) println("The element at $index is $element")

کلید واژه ی break و continue

این کلید واژه ها داخل حلقه مورد استفاده قرار میگیرن.

۱- کلید واژه ی break:

برای شکستن حلقه و جلو گیری از ادامه ی تکرار استفاده میشه

مثال

var sum = 0 var lastNumber = 0 for(number in 1..20){ sum += number lastNumber = number if(sum >= 100) break } println("Last Number in iteration is $lastNumber") println("Sum is $sum")

۲-کلید واژه ی continue:

برای جلو گیری از اجرای بقیه کد ها در داخل حلقه استفاده میشه

مثال:

var sum = 0 for(number in 1..20){ if(number % 2 != 0) continue sum+=number } println("Sum of even numbers to 20 is $sum")

حلقه ی while

حلقه ی while در کاتلین دارای دو بخشه:

ساختار حلقه ی while

۱- بررسی شرط (condition) برای تکرار حلقه

۲- بدنه ی حلقه و اجرای کد های داخل آن پس از برقرار بودن شرط در هر تکرار

مثال:

در مثال زیر برنامه یک عدد بین 0 تا 10 به صورت تصادفی ایجاد میکنه و کاربر باید عدد رو حدس بزنه در این مثال از کلید واژه ی break استفاده شده.

val input = Scanner(System.in); val num: Int = (0..10).random().toInt(); var answer = -1; println("Guess the number generated by random:"); while (answer != num){ answer = input.nextInt(); if (answer == num) break; else if (answer > num) println("Your answer $answer is too high guess again"); else println("Your answer $answer is too low guess again"); } println("Congratulations! you guessed correct");

در داخل حلقه به بررسی جواب میپردازیم اگر جواب برابر با عدد ساخته شده بود تکرار رو متوقف میکنه و از حلقه خارج میشه. اگه جواب بزرگتر از عدد ساخته شده بود پیغام بزرگ بودن مقدار پاسخ نمایش میده و کاربر دوباره باید پاسخ بده. گه جواب کوچیکتر بود پیغام کوچیکتر بودن مقدار پاسخ میده و کاربر باید دوباره پاسخ بده.

حلقه ی do while

حلقه ی do while در کاتلین مثل while است با این تفاوت که ابتدا کد های داخل بدنه ی حلقه اجرا میشن بعد شرط ادامه ی حلقه بررسی میشه.

مثال:

در برنامه ی زیر کاربر عدد رو وارد میکنه و پس از وارد کردن اعداد دلخواه با صفر از حلقه خارج میشه و برنامه حاصل جمع اعداد وارد شده رو نشون میده.

var data; var sum = 0; val input = Scanner(System.in); do { print("Enter a number (the input ends with 0): "); data = input.nextInt(); sum += data; }while (data != 0); println("The sum is $sum");

حلقه های تو در تو (nested loops)

اگه بخوایم داخل یک حلقه، حلقه ی دیگه ای استفاده کنیم ازش به عنوان حلقه های تو در تو یاد میکنیم.

مثال:

for(i in 0 until 100){ print("for i = $i printing j: ") for(j in 0 until 100){ print("$j ") } println() }

با هر تکرار حلقه ی بیرونی (i) حلقه ی داخلی (j) یک بار کامل از 0 تا 99 اجرا میشه و این موضوع درباره ی تمام حلقه ها صدق میکنه. میتونیم به‌جای for از هر حلقه ای که خواستیم استفاده کنیم.

خلاصه

سه نوع حلقه داریم for، while، do while

تمام حلقه ها برای متوقف شدن نیاز به شرط دارن اما حلقه ی for در کاتلین شرط به صورت آشکار تعریف نمیشه

حلقه ی for در کاتلین به دو روش foreach و index-based میتونه پیاده‌سازی بشه

برای متوقف شدن حلقه ی while و do-while آشکارا باید شرط تعریف کنیم

حلقه ی do-while در کاتلین ابتدا کد های داخل بدنه اجرا میشه سپس شرط ادامه ی حلقه بررسی میشه

میتونیم داخل یک حلقه، حلقه ی دیگه ای استفاده کنیم که بهش میگیم حلقه های تو در تو (nested loops)

خب اینم از بحث حلقه ها در کاتلین!

بد نیست یه سری به وبسایت رسمی کاتلین درباره این موضوع بزنید. لینکش تو مطالب مرتبط هست.

موفق باشید.

arrow_drop_up
کپی شد!