Enums مع when
معالجة شاملة للحالات
Enums مع when درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
التعدادات مناسبة تمامًا مع when
يُعد تعبير when الطريقة الطبيعية للتفرع استنادًا إلى تعداد. ويحصل كل ثابت على فرع خاص به.
enum class Light { RED, YELLOW, GREEN }
fun action(l: Light) = when (l) {
Light.RED -> "Stop"
Light.YELLOW -> "Slow"
Light.GREEN -> "Go"
}
fun main() {
println(action(Light.GREEN))
}التغطية الكاملة
عند استخدام when كتعبير مع تعداد وتغطية جميع الثوابت، لا تكون هناك حاجة إلى فرع else. ويتحقق المصرّف من اكتمال التغطية.
enum class Coin { HEADS, TAILS }
fun flip(c: Coin) = when (c) {
Coin.HEADS -> "Win"
Coin.TAILS -> "Lose"
}
fun main() {
println(flip(Coin.HEADS))
}المصرّف يحميك
إذا أضفت ثابتًا جديدًا لاحقًا ونسيت إضافة فرع له، فسيبلغ المصرّف عن خطأ. وهذا يجعل تطوير التعدادات مع when آمنًا جدًا.
enum class Size { S, M, L }
fun label(s: Size) = when (s) {
Size.S -> "Small"
Size.M -> "Medium"
Size.L -> "Large"
}
fun main() {
println(label(Size.M))
}استيراد الثوابت
يمكنك استيراد أعضاء التعداد لحذف بادئة النوع داخل when، مما يجعل الفروع أقصر.
enum class Dir { UP, DOWN }
import Dir.UP
import Dir.DOWN
fun move(d: Dir) = when (d) {
UP -> "y + 1"
DOWN -> "y - 1"
}
fun main() {
println(move(Dir.UP))
}تجميع الفروع
يمكن لعدة ثوابت مشاركة فرع واحد بإدراجها مفصولة بفواصل.
enum class Day { MON, TUE, WED, SAT, SUN }
fun kind(d: Day) = when (d) {
Day.SAT, Day.SUN -> "Weekend"
else -> "Weekday"
}
fun main() {
println(kind(Day.SAT))
}إرجاع أنواع مختلفة
يمكن لكل فرع إنتاج قيمة، ويصبح تعبير when بأكمله هو تلك القيمة.
enum class Tier { FREE, PRO }
fun limit(t: Tier): Int = when (t) {
Tier.FREE -> 10
Tier.PRO -> 1000
}
fun main() {
println(limit(Tier.PRO))
}when من دون وسيط
يمكنك أيضًا التفرع استنادًا إلى الشروط، لكن استخدام صيغة الموضوع مع التعدادات أوضح ويمكّن من التحقق من التغطية الكاملة.
enum class Mood { HAPPY, SAD }
fun emoji(m: Mood) = when (m) {
Mood.HAPPY -> ":)"
Mood.SAD -> ":("
}
fun main() {
println(emoji(Mood.HAPPY))
}الآثار الجانبية في الفروع
يمكن للفروع تنفيذ عبارات، وليس إرجاع قيم فقط.
enum class Cmd { START, STOP }
fun run(c: Cmd) {
when (c) {
Cmd.START -> println("Starting...")
Cmd.STOP -> println("Stopping...")
}
}
fun main() {
run(Cmd.START)
}تجنب else متى أمكن
يؤدي استخدام else إلى تعطيل التحقق من التغطية الكاملة: إذ سينتقل الثابت الجديد بصمت إلى else. فضّل الفروع الصريحة عند استخدام التعدادات.
enum class State { ON, OFF }
fun text(s: State) = when (s) {
State.ON -> "on"
State.OFF -> "off"
}
fun main() {
println(text(State.OFF))
}موجّه واقعي
يُعد توجيه أدوار المستخدمين إلى الصلاحيات استخدامًا واضحًا لتعبير when ذي التغطية الكاملة.
enum class Role { ADMIN, USER, GUEST }
fun canDelete(r: Role) = when (r) {
Role.ADMIN -> true
Role.USER -> false
Role.GUEST -> false
}
fun main() {
println(canDelete(Role.ADMIN))
}الدمج مع الخصائص
يمكنك التفرع استنادًا إلى تعداد، واستخدام خصائصه أيضًا داخل الفروع.
enum class Coin(val cents: Int) { PENNY(1), DIME(10) }
fun describe(c: Coin) = when (c) {
Coin.PENNY -> "Worth ${c.cents}"
Coin.DIME -> "Worth ${c.cents}"
}
fun main() {
println(describe(Coin.DIME))
}تحقق سريع
اختبر فهمك للتعدادات مع when.
مراجعة
تعلمت دمج التعدادات مع when:
- يمكن أن يكون
whenعلى تعداد مغطّيًا لجميع الحالات من دونelse. - يفرض المصرّف تغطية جميع الثوابت.
- جمّع الثوابت باستخدام الفواصل؛ إذ يُنتج كل فرع قيمة.
- تجنب
elseللحفاظ على أمان التغطية الكاملة.
enum class Light { RED, GREEN }
fun go(l: Light) = when (l) {
Light.RED -> false
Light.GREEN -> true
}
fun main() {
println(go(Light.GREEN))
}تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «Enums مع when» مجاني؟
نعم — نص درس «Enums مع when» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «Enums مع when»؟
معالجة شاملة للحالات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Enums مع when»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف Enums
- خصائص Enum وطرائقها
- Enums مع when
- قيم Enum وترتيباتها