منوهای نصب در پنل مدیریت

عبارت when در کاتلین

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

به طور کلی عبارت when در کاتلین به نوعی میتواند همانند دستور switch در جاوا به حساب بیاید.

با یک مثال ساده این دستور را مورد بررسی قرار می دهیم.
در کد زیر یک عملگر از کاربر درخواست می شود و با کمک عبارت when و عملگر وارد شده، عمل مورد نظر روی دو متغیر a و b صورت می گیرد.

val a = 12
val b = 5
println("Enter operator either +, -, * or / ")
val result = when (readLine()) {
"+" -> a + b
"-" -> a - b
"*" -> a * b
"/" -> a / b
else -> "invalid input."
}
println("result = $result")

اگر برنامه را اجرا کنیم و در ورودی مثلا * را وارد کنیم، خروجی به صورت زیر خواهد بود:

Enter operator either +, -, * or /
*
result = 60

در کد بالا، عبارت when عملگر وارد شده را بررسی میکند و با هر کدام از موارد موجود که مطابقت داشته باشد، کد مربوط به آن را اجرا میکند. اگر ورودی کاربر با هیچکدام از موارد موجود مطابقت نداشته باشد، کد مربوط به else را اجرا میکند.

در کد بالا از دستور when به صورت یک عبارت (expression) استفاده کردیم اما لزومی ندارد که همیشه این کار را انجام بدهیم. میتوانیم به صورت زیر نیز از آن استفاده کنیم:

val a = 12
val b = 5
println("Enter operator either +, -, * or /")
when (readLine()) {
"+" -> println("$a + $b = ${a + b}")
"-" -> println("$a - $b = ${a - b}")
"*" -> println("$a * $b = ${a * b}")
"/" -> println("$a / $b = ${a / b}")
else -> println("invalid input")
}

اگر کد را اجرا کنیم و برای مثال در ورودی عملگر تفریق را وارد کنیم، خروجی به صورت زیر خواهد بود:

Enter operator either +, -, * or /
-
12 - 5 = 7

در این کد، از دستور when به عنوان یک عبارت (expression) استفاده نکردیم (یعنی دستور when مقدار برگشتی ندارد یا مقدار آن به هیچ متغیری داده نشده است)

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

مثال هایی از عبارت when در کاتلین

در ادامه به کاربردهای مختلف عبارت when در کاتلین می پردازیم و مثال های مختلفی را مورد بررسی قرار میدهیم

استفاده از یک کد برای چند شرط متفاوت و جدا کردن آنها با کاما

val n = -1

when (n) {
    1, 2, 3 -> println("n is a positive integer less than 4.")
    0 -> println("n is zero")
    -1, -2 -> println("n is a negative integer greater than 3.")
}

در کد بالا مشاهده میکنید که برای سه آپشن 1 و 2 و 3 فقط یک کد اجرا می شود. همچنین برای 1- و 2- . از این دستور می توان در بسیاری از حالت های مشابه که برای چند گزینه یک کد یکسان اجرا می شود استفاده کرد.

بررسی وجود مقدار در یک بازه عددی

میتوان با کمک عبارت when بررسی کرد که آیا عدد مورد نظر در یک بازه خاص قرار دارد یا خیر.

    val a = 100
    when (a) {
        in 1..10 -> println("A positive number less than 11.")
        in 10..100 -> println("A positive number between 10 and 100 (inclusive)")
    }

استفاده از یک عبارت (expression) در شاخه های دستور when

میتوان به جای استفاده از صرفا یک مقدار خاص، در شرط ها از یک اسپرشن استفاده کرد
    val a = 11
    val n = "11"

    when (n) {
        "cat" -> println("Cat? Really?")
        12.toString() -> println("Close but not close enough.")
        a.toString() -> println("Bingo! It's eleven.")
    }

بررسی وجود داده در یک کالکشن

میتوان بررسی کرد که آیا داده مورد نظر در یک لیست خاص وجود دارد یا خیر.
val a = 5
val b = arrayOf(1,2,3,4,5,6,7,8,9)
val x = when(a){
    in b -> "Single Digit"
    in 10..100 -> "Two Digit"
    else -> "Other"
}
println(x)

استفاده از when بدون شرط

میتوان هیچ شرط خاصی برای دستور when قرار نداد و در هر شاخه یک شرط مورد نظر را بررسی کرد که ممکن است هیچ ارتباطی به شاخه های دیگر نداشته باشد.  در این صورت اولین شرطی که درست باشد، کد مربوط به آن اجرا می شود.
val a = 5
val b = arrayOf(1,2,3,4,5,6,7,8,9)
val x = when {
    a < 10 -> "a is small"
    b.size < 0 -> "b is not empty"
    a in b -> "a is in b"
    else -> "None"
}
println(x)

کد چند خطی در عبارت when در کاتلین

کد مربوط به هر شرط در دستور when لزومی ندارد که فقط از یک لاین تشکیل شده باشد و ممکن است بیشتر از یک لاین باشد. در چنین حالتی باید از آکولاد استفاده کنیم.
var a = 5
when(a) {
    10 -> print(a)
    in -10..-1 -> {
        println("$a is negative")
        a += 10
    }
    else -> {
        println(a)
        println("Nothing to show here")
    }
}

جمع بندی

عبارت when در کاتلین یکی از دستورات کاربردی و مهم می باشد و همانطور که مشاهده کردید میتوان از آن در موقعیت های بسیاری استفاده کرد.

0 پاسخ به "عبارت when در کاتلین"

ارسال یک پیام

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

Hetbo.net 2016 - 2020