when

when هي الجزء المطور والبديل عن switch-case في لغات البرمجة بحيث انها اكثر مرونه ومنطقية وقابلة للتخصيص والتعديل باكثر من نوع من المتغيرات . والجميل ايضاً انا يمكننا استخدامها كـ-statment او كـextension بشكل سريع .


الصيغة العامة لها تكون بهذا الشكل :

 var dayOfWeek = 4
    when(dayOfWeek) {
        1 -> println("Monday")
        2 -> println("Tuesday")
        3 -> println("Wednesday")
        4 -> println("Thursday")
        5 -> println("Friday")
        6 -> println("Saturday")
        7 -> println("Sunday")
        else -> println("Invalid Day")
    }
// Displays - "Thursday"

نلاحظ اننا قمنا ايضاً باستخدام else اذا قام المستخدم بادخال رقم خارج الحدود سيطبع له ان اليوم غير صحيح .


الدمج بين اكثر من قيمة او شرط :

اذا كان لديك اكثر من حالة وتود اختبارها في when واحدة سيتحتم عليك وضع فاصلة بين كل احتمال وآخر كما ستلاحظ في الشفرة القادمة 

var dayOfWeek = 6
when (dayOfWeek) {
    1, 2, 3, 4, 5 -> println("Weekday")
    6, 7 -> println("Weekend")
    else -> println("Invalid Day")
}
// Displays - Weekend

استخدامها مع النطاق :

var dayOfMonth = 5
when(dayOfMonth) {
    in 1..7 -> println("We're in the first Week of the Month")
    !in 15..21 -> println("We're not in the third week of the Month")
    else -> println("none of the above")
}
// Displays - We're in the first Week of the Month

استخدامها كـis :

اذا اردت التحقق من نوع المتغير يمكنك استخدام is مع when بالشكل التالي 

var x : Any = 6.86
when(x) {
    is Int -> println("$x is an Int")
    is String -> println("$x is a String")
    !is Double -> println("$x is not Double")
    else -> println("none of the above")
}
// Displays - none of the above

استخدامها كبديل لـif-else-if :

يمكن استخدام when كبديل للـif-else-if ستكون افضل وارتب للكود واكثر منطقية عندما تكون الاحتمالات كثيرة كما ستلاحظ في الشفرة القادمة

var number = 20
when {
    number < 0 -> println("$number is less than zero")
    number % 2 == 0 -> println("$number is even")
    number > 100 -> println("$number is greater than 100")
    else -> println("None of the above")
}
// Displays - 20 is even