4

if و when؛ دوراهی‌های زندگی کد

برنامه بدون شرط مثل راننده‌ایه که چراغ قرمز و سبز براش یکیه؛ خطرناک و پرحاشیه.

درس 4 از 20

if فقط دستور نیست؛ عبارت هم هست

در کاتلین `if` می‌تونه خروجی برگردونه. یعنی لازم نیست الکی متغیر بسازی و بعد مقدار بدی. تمیز و شسته‌رفته؛ نه مثل کدی که انگار با دمپایی نوشته شده.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

if expression
fun main() {
    val score = 82
    val result = if (score >= 60) "قبول" else "رد"

    println(result)
}
خروجی یا نتیجه اجرا
قبول
نکته کاربردی: این بخش اسکلت ذهنی درس را می‌سازد. وقتی بدانی این قطعه دقیقاً چه مسئله‌ای را حل می‌کند، بعداً موقع پروژه فقط syntax حفظی تحویل نمی‌دهی؛ تصمیم درست می‌گیری. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

when؛ سوئیچ با کلاس

`when` نسخه‌ی خوش‌تیپ‌تر switch در زبان‌های دیگه‌ست. هم خواناست، هم انعطاف‌پذیر. وقتی چند حالت داری، به‌جای if تو در تو از when استفاده کن؛ کدت نفس می‌کشه.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

when expression
fun main() {
    val day = 5

    val name = when (day) {
        1 -> "شنبه"
        2 -> "یکشنبه"
        3 -> "دوشنبه"
        4 -> "سه‌شنبه"
        5 -> "چهارشنبه"
        else -> "تعطیل یا نامشخص"
    }

    println(name)
}
خروجی یا نتیجه اجرا
چهارشنبه
نکته کاربردی: اینجا باید به رفتار کد نگاه کنی، نه فقط ظاهرش. مقدارها را عوض کن و دوباره اجرا بگیر تا دستت بفهمد برنامه چطور واکنش نشان می‌دهد. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

رنج‌ها داخل when

می‌تونی با `in` بازه چک کنی. این برای امتیاز، سن، سطح دسترسی و هزار چیز دیگه به کارت میاد.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

when با range
val age = 16
val group = when (age) {
    in 0..12 -> "کودک"
    in 13..17 -> "نوجوان"
    else -> "بزرگسال"
}
خروجی یا نتیجه اجرا
group = نوجوان
نکته کاربردی: این الگو در پروژه واقعی زیاد تکرار می‌شود. از همین حالا تمیز و خوانا بنویس تا بعداً موقع دیباگ، خودت به خودت فحش ندهی. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

نتیجه این درس 🎯

if و when فقط برای دوراهی ساده نیستند؛ چون expression هستند می‌توانند مقدار تولید کنند. همین باعث می‌شود کد کوتاه‌تر و خواناتر بماند.

تمرین! 🧠

برنامه‌ای بنویس که نمره را بگیرد و وضعیت عالی، خوب، قبول یا رد چاپ کند.

جواب تمرین
fun main() {
    print("نمره: ")
    val score = readln().toInt()

    val status = when (score) {
        in 90..100 -> "عالی، ترکوندی!"
        in 75..89 -> "خوب، قابل احترام"
        in 60..74 -> "قبول، ولی جا داری"
        else -> "رد، برو یه چایی بخور دوباره بخون"
    }

    println(status)
}
خروجی جواب
نمره: 92
عالی، ترکوندی!