الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 4 من 59/50 في الدورة~10 min
دروس الوحدة (4/5)

التبديل الاصطلاحي

يعد switch الخاص بـ Go أكثر ملاءمة من لغة C/Java: كل case له خصائصه الخاصة كتلة ضمنية خاصة بك (لا يوجد break للكتابة)، يمكنك التجميع قيم متعددة بفاصلة، وswitch بدون تعبير مثل سلسلة if/else if الأكثر قابلية للقراءة.

قم بالتبديل على قيمة

Go
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
    fmt.Println("feriale")
case "sab", "dom":
    fmt.Println("weekend")
default:
    fmt.Println("sconosciuto")
}

case يقبل قيمًا متعددة مفصولة بفواصل و لا يوجد ضمني Fallthrough: بمجرد تنفيذ الحالة، يخرج المفتاح.

التبديل دون شرط

إذا قمت بحذف التعبير، يقوم المحول بتقييم true وكل case هو محمي_INLINE_10 الحالة. إنه البديل الاصطلاحي للسلاسل الطويلة if/else if:

Go
switch {
case x < 0:
    fmt.Println("negativo")
case x == 0:
    fmt.Println("zero")
case x < 10:
    fmt.Println("piccolo")
default:
    fmt.Println("grande")
}

بيان الحرف الأول

كما هو الحال مع if، يقبل switch أيضًا عبارة init:

Go
switch n := len(s); {
case n == 0:
    fmt.Println("vuoto")
case n > 100:
    fmt.Println("lungo")
default:
    fmt.Println("ok")
}

n موجود فقط داخل المحول.

صريح fallthrough

إذا كنت تريد حقًا أن يقع التنفيذ في الحالة التالية، فعليك كتابتها:

Go
switch 1 {
case 1:
    fmt.Println("uno")
    fallthrough
case 2:
    fmt.Println("due")  // anche questo viene stampato
case 3:
    fmt.Println("tre")  // questo no
}

نوع التبديل (معاينة)

يتيح لك التمييز بناءً على النوع الديناميكي للواجهة قيمة. سنغطيها بعمق في وحدة الواجهات:

Go
var i interface{} = "ciao"
switch v := i.(type) {
case int:
    fmt.Println("int:", v)
case string:
    fmt.Println("string:", v)
default:
    fmt.Printf("tipo %T\n", v)
}

جربه

تمرين#go.m2.l4.e1
المحاولات: 0جارٍ التحميل…

اطبع "feriale" لـ lun/mar/mer/gio/ven، أو "عطلة نهاية الأسبوع" بخلاف ذلك، باستخدام مفتاح على قيمة g.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتجميع أيام الأسبوع الخمسة في حالة واحدة مفصولة بفواصل.

الحل متاح بعد 3 من المحاولات

تمرين#go.m2.l4.e2
المحاولات: 0جارٍ التحميل…

استخدم مفتاحًا بدون شرط لطباعة "neg" أو "صفر" أو "pos" اعتمادًا على x.

جارٍ تحميل المحرر…
إظهار التلميح

لا يوجد تعبير بعد `switch`، فقط `{`.

الحل متاح بعد 3 من المحاولات

Quiz#go.m2.l4.e3
جاهز

ماذا يطبع هذا البرنامج؟

Go
switch 1 {
case 1:
    fmt.Print("a")
case 2:
    fmt.Print("b")
}
خيارات الإجابة

خلاصة

  • case يقبل قيمًا متعددة مفصولة بفواصل.
  • لا يوجد خطأ ضمني: كل حالة لها break الضمني الخاص بها.
  • switch { ... } بدون تعبير = سلسلة if/else if أكثر قابلية للقراءة.
  • بيان التهيئة: switch x := f(); { ... }، النطاق محدود بالكتلة.
  • fallthrough موجود ولكنه نادر؛ يدخل الحالة التالية دون تقييم حالتها.
  • اكتب المفتاح v := i.(type) للتمييز بناءً على النوع الديناميكي (وحدة الواجهات).