مشخصات مقاله
-
677
-
0.0
-
2082
-
0
-
0
آشنایی با جریان کنترل Kotlin
جریان کنترل Kotlin
در بخش قبل انواع مختلفی از دادههای موجود در سیستم Kotlin را یاد گرفتیم. در این بخش میخواهیم به بررسی انواع مختلفی از سازوکارهای جریان کنترل در Kotlin بپردازیم.
If - Else
Kotlin یک زبان کارکردی است. به همین دلیل مانند تمامی زبانهای کارکردی “if” در Kotlin یک عبارت و نه یک واژهی کلیدی محسوب میشود. عبارت “if” هر زمان که نیاز باشد، مقداری را برگشت میدهد. بلوک “if-else” در این زبان مانند زبانهای دیگر مثل یک عملگر بررسی حالت اولیه عمل میکند. در مثال زیر دو متغیر با هم مقایسه شدهاند و بر همین اساس خروجی لازم ایجاد شده است.
fun main(args: Array< String >) {
val a:Int = 5
val b:Int = 2
var max: Int
if (a > b) {
max = a
} else {
max = b
}
print("Maximum of a or b is " +max)
// As expression
// val max = if (a > b) a else b
}
نتیجهی کد بالا را میتوانید در زیر مشاهده کنید. مثال ما شامل خط دیگری از کد نیز است که این خط چگونگی استفاده از دستور “If” بهصورت یک عبارت را نشان میدهد.
Maximum of a or b is 5
کاربرد When
اگر با زبانهای برنامهنویسی دیگر آشنا باشید، در این صورت احتمالاً دستور سوئیچ به گوشتان خورده است. این دستور زمانی که چندین حالت بر روی یک متغیر مشخص اعمال شوند، به یک عملگر شرطی تبدیل میشود. عملگر “when” در برابر شروط شاخه بر مقدار متغیر منطبق میشود. اگر شرط شاخه برآورده شود، در این صورت این عملگر این دستور را داخل همان محدوده اجرا میکند. در مثال زیر کاربرد “when” در Kotlin بهتر توضیح داده شده است.
fun main(args: Array< String >) {
val x:Int = 5
when (x) {
1 -> print("x = = 1")
2 -> print("x = = 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
}
نتیجهی کد بالا در ادامه نشان داده شده است.
x is neither 1 nor 2
در مثال بالا کامپایلر Kotlin مقدار x را بر شاخههای مشخص منطبق میکند. اگر این مقدار با یکی از شاخهها مطابقتی نداشته باشد، در این صورت کامپایلر بخش else را اجرا میکند. در عمل when با چندین بلوک if برابری میکند. Kotlin انعطافپذیری دیگری را نیز در اختیار برنامهنویس قرار میدهد. به این صورت که برنامهنویس میتواند با قرار دادن “,” داخل چکها، چندین چک را در یک خط ارائه کند. مثال بالا را مانند زیر تغییر دهید.
fun main(args: Array< String >) {
val x:Int = 5
when (x) {
1,2 -> print(" Value of X either 1,2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
}
این کد را مجدداً در مرورگر اجرا کنید تا نتیجهی زیر نمایش داده شود.
x is neither 1 nor 2
حلقهی For
حلقه اختراعی است که انعطافپذیری تکرار از طریق هر نوع ساختار دادهای را افزایش داده است. Kotlin مانند هر زبان برنامهنویسی دیگر، روشهای مختلفی را برای ایجاد حلقه ارائه میکند. با این حال از میان آنها حلقهی For توانسته به بهترین شکل عمل کند. پیادهسازی و استفاده از حلقهی For بهصورت مفهومی شبیه به حلقهی For جاوا است. در مثال زیر چگونگی استفاده از این حلقه در مثالهای واقعی نشان داده شده است.
fun main(args: Array< String >) {
val items = listOf(1, 2, 3, 4)
for (i in items) println("values of the array"+i)
}
در تکه کد بالا یک لیست به نام “items” اعلان شده است و با استفاده از حلقهی for در سرتاسر این لیست تعریفشده تکرار انجام میشود و درنهایت مقدار آن در مرورگر چاپ میشود. در ادامه میتوانید خروجی آن را مشاهده کنید.
values of the array1 values of the array2 values of the array3 values of the array4
در ادامه نمونه کد دیگری را مشاهده میکنید که در آن از برخی از توابع کتابخانهای استفاده شده است تا کار برنامهنویسی راحتتر از قبل شود.
fun main(args: Array< String >) {
val items = listOf(1, 22, 83, 4)
for ((index, value) in items.withIndex()) {
println("the element at $index is $value")
}
}
پس از کامپایل و اجرا شدن کد بالا نتیجهی زیر در مرورگر نمایش داده میشود.
the element at 0 is 1 the element at 1 is 22 the element at 2 is 83 the element at 3 is 4
حلقههای While و Do-While
عملکرد این دو حلقه شبیه به عملکرد آنها در زبانهای دیگر است. تنها تفاوت آنها این است که برای حالت حلقهی Do-while شرط در انتهای حلقه سنجیده میشود. مثال زیر کاربرد حلقهی While را نشان میدهد.
fun main(args: Array< String >) {
var x:Int = 0
println("Example of While Loop--")
while(x< = 10) {
println(x)
x++
}
}
نتیجهی تکه کد بالا در ادامه نشان داده شده است.
Example of While Loop-- 0 1 2 3 4 5 6 7 8 9 10
Kotlin حلقهی دیگری نیز دارد که اسم آن حلقهی Do-While است که بدنهی این حلقه یک بار اجرا میشود و تنها در همان موقع شرط بررسی میشود. مثال زیر کاربرد حلقهی Do-while را نشان میدهد.
fun main(args: Array< String >) {
var x:Int = 0
do {
x = x + 10
println("I am inside Do block---"+x)
} while(x <= 50)
}
نتیجهی تکه کد بالا در ادامه نشان داده شده است. در این کد کامپایلر Kotlin بلوک DO را اجرا میکند و پس از آن سراغ بررسی شرط در بلوک while میرود.
I am inside Do block---10 I am inside Do block---20 I am inside Do block---30 I am inside Do block---40 I am inside Do block---50 I am inside Do block---60
استفاده از Return, Break, Continue
اگر با هر زبان برنامهنویسی دیگری آشنا باشید، در این صورت باید بهصورت کلی با واژههای کلیدی مختلف آشنایی داشته باشید؛ واژههایی که به ما کمک میکنند تا در برنامه جریان کنترل مناسبی را اجرا کنیم. در ادامه واژههای کلیدی مختلفی را میبینید که از آنها میتوان جهت کنترل حلقهها یا هر نوع جریان کنترل دیگر استفاده کرد.
Return : این واژهی کلیدی مقداری را از تابع فراخوانده شده به تابع فراخواننده برگشت میدهد. در مثال زیر این حالت با استفاده از زمینهی برنامهنویسی Kotlin ما انجام شده است.
fun main(args: Array< String >) {
var x:Int = 10
println("The value of X is--"+doubleMe(x))
}
fun doubleMe(x:Int):Int {
return 2*x;
}
در تکه کد بالا تابع دیگری فراخوانی شده است و ورودی در 2 ضرب شده و مقدار حاصل به تابع فراخوانی شده که تابع main ما است، برگشت داده شده است. Kotlin این تابع را بهصورت دیگری تعریف میکند که به این امر در بخشهای آینده خواهیم پرداخت. فعلاً فهم این مطلب کفایت میکند که کد بالا نتیجهی زیر را تولید میکند.
The value of X is--20
:Continue & Break این دو واژهی کلیدی مهمترین بخشهای یک مسئلهی منطقی هستند. اگر شرطی با شکست مواجه شود، واژهی کلیدی “break”به جریان کنترلکننده پایان میدهد و واژهی کلیدی “continue” خلاف این کار را انجام میدهد. رخ دادن کل این عملیات را میتوان فوراً با چشم دید. Kotlin از زبانهای برنامهنویسی دیگر هوشمندتر است. چرا که در آن برنامهنویس میتواند بیش از یک برچسب را در معرض دید قرار دهد. در کد زیر چگونگی پیادهسازی این برچسب در Kotlin نشان داده شده است.
fun main(args: Array< String >) {
println("Example of Break and Continue")
myLabel@ for(x in 1..10) { // appling the custom label
if(x = = 5) {
println("I am inside if block with value"+x+"\n-- hence it will close the operation")
break@myLabel //specifing the label
} else {
println("I am inside else block with value"+x)
continue@myLabel
}
}
}
نتیجهی کد بالا در ادامه آمده است.
Example of Break and Continue I am inside else block with value1 I am inside else block with value2 I am inside else block with value3 I am inside else block with value4 I am inside if block with value5 -- hence it will close the operation
همانطور که میبینید، کنترلکننده تا زمانی که مقدار x برابر با 5 شود، حلقه را ادامه میدهد. بعد از اینکه این مقدار برابر با 5 میشود، بلوک if را اجرا میکند و پس از رسیدن به دستور break کل جریان کنترل به اجرای برنامه خاتمه میدهد.