الشروط في Kotlin: if و when
كل تطبيق يتخذ قرارات طوال الوقت: هل كلمة المرور صحيحة؟ هل الإنترنت متصل؟ هل المنتج متوفر؟ في هذا الدرس ستتعلم أدوات القرار في Kotlin: الشرط if الذي تعرفه من لغات أخرى لكن بقدرة إضافية، والتعبير when الذي سيصبح من أدواتك المفضلة.
if و else
Section titled “if و else”val score = 72
if (score >= 90) { println("ممتاز")} else if (score >= 50) { println("ناجح")} else { println("راسب")}ناجحKotlin تفحص الشروط من الأعلى، وتنفّذ أول شرط صحيح فقط. والشرط يجب أن يكون من نوع Boolean.
عوامل المقارنة: == و != و > و < و >= و <=.
العوامل المنطقية: && (و)، و || (أو)، و ! (ليس):
val age = 16val hasTicket = trueif (age >= 13 && hasTicket) println("تفضل بالدخول")تفضل بالدخولif كتعبير يُرجع قيمة
Section titled “if كتعبير يُرجع قيمة”هنا تظهر قوة Kotlin: if ليست مجرد أمر، بل تعبير يُرجع قيمة تضعها في متغير مباشرة:
val stock = 0val status = if (stock > 0) "متوفر" else "غير متوفر"println(status)غير متوفرلهذا لا يوجد في Kotlin المعامل الثلاثي ? : الموجود في لغات أخرى، فـ if تقوم بدوره بشكل أوضح. مثال عملي آخر:
val total = 650val shipping = if (total >= 500) 0 else 40println("الشحن: $shipping جنيه")الشحن: 0 جنيهالتعبير when
Section titled “التعبير when”عندما تقارن قيمة واحدة بعدة احتمالات، استخدم when. وهو أقوى وأنظف من سلسلة طويلة من else if:
val day = "الجمعة"
val message = when (day) { "الجمعة", "السبت" -> "عطلة نهاية الأسبوع" "الأحد" -> "أول أيام الدراسة" else -> "يوم دراسي عادي"}
println(message)عطلة نهاية الأسبوع- كل فرع: قيمة (أو عدة قيم بينها فاصلة) ثم السهم
->ثم النتيجة. elseلكل ما لم يطابق الفروع السابقة.- ومثل
if، يمكن أن يُرجعwhenقيمة نضعها في متغير.
تخيّل when مثل موظف الاستقبال في فندق: ينظر إلى نوع حجزك، فيرسلك إلى الطابق المناسب، ومن ليس له حجز يرسله إلى مكتب الاستعلامات (else).
when مع المجالات
Section titled “when مع المجالات”يمكن أن يكون الفرع مجالاً من القيم باستخدام in:
val temp = 25when (temp) { in 0..15 -> println("الجو بارد") in 16..28 -> println("الجو معتدل") else -> println("الجو حار")}الجو معتدل0..15 تعني كل الأعداد من 0 إلى 15 شاملة الطرفين. وستستخدم هذه المجالات كثيراً مع الحلقات في الدرس القادم.
when بدون قيمة
Section titled “when بدون قيمة”إذا لم تكتب قيمة بعد when، يصبح كل فرع شرطاً حراً، فيحل محل سلسلة else if كاملة:
val grade = 85val label = when { grade >= 90 -> "A" grade >= 75 -> "B" else -> "C"}println(label)Bهذا الشكل أوضح بكثير من if المتداخلة عندما تكثر الشروط.
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامجاً لمطعم يحدد سعر الوجبة حسب حجمها:
- متغير
sizeقيمته"صغير"أو"وسط"أو"كبير". - استخدم
whenليحدد السعر: 30 أو 45 أو 60، و 0 لأي قيمة أخرى. - استخدم
ifكتعبير ليضيف 10 جنيهات توصيل إذا كان متغيرdeliveryيساويtrue. - اطبع: «سعر الوجبة: … جنيه».
تحدٍّ: اكتب when بدون قيمة يطبع تقييم سرعة الإنترنت: أقل من 5 «بطيء»، ومن 5 إلى 50 «جيد»، وأكثر «ممتاز».
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان else عند استخدام when كتعبير: إذا كان
whenيُرجع قيمة، يجب أن يغطي كل الاحتمالات، فيطلب المترجمelse. - ترتيب الشروط: في
whenبدون قيمة، يُنفَّذ أول فرع صحيح. لو بدأت بـgrade >= 50لن يصل أحد إلى «A». - استخدام = بدل ==:
if (x = 5)خطأ يرفضه المترجم في Kotlin، وهذا جيد لأنه يحميك.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما قيمة result في val result = if (7 > 3) "نعم" else "لا"؟
if في Kotlin تعبير يُرجع قيمة، والشرط صحيح فتصبح القيمة «نعم».
سؤال
ماذا يعني الفرع in 1..10 -> ... داخل when؟
1..10 مجال يشمل كل الأعداد من 1 إلى 10، و in تفحص هل القيمة داخله.
الخلاصة
Section titled “الخلاصة”ifوelse ifوelseلاتخاذ القرارات، والشرط من نوعBoolean.ifفي Kotlin تعبير يُرجع قيمة، ولهذا لا يوجد معامل ثلاثي.whenيقارن قيمة بعدة فروع، ويقبل قيماً متعددة ومجالات بـin.whenبدون قيمة يحل محل سلسلةelse ifالطويلة.==تقارن المحتوى، وelseمطلوبة عندما يُرجعwhenقيمة.