دروس الوحدة (4/5)
التبديل الاصطلاحي
يعد switch الخاص بـ Go أكثر ملاءمة من لغة C/Java: كل case له خصائصه الخاصة
كتلة ضمنية خاصة بك (لا يوجد break للكتابة)، يمكنك التجميع
قيم متعددة بفاصلة، وswitch بدون تعبير
مثل سلسلة if/else if الأكثر قابلية للقراءة.
قم بالتبديل على قيمة
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:
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:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n موجود فقط داخل المحول.
صريح fallthrough
إذا كنت تريد حقًا أن يقع التنفيذ في الحالة التالية، فعليك كتابتها:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}نوع التبديل (معاينة)
يتيح لك التمييز بناءً على النوع الديناميكي للواجهة قيمة. سنغطيها بعمق في وحدة الواجهات:
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)
}جربه
اطبع "feriale" لـ lun/mar/mer/gio/ven، أو "عطلة نهاية الأسبوع" بخلاف ذلك، باستخدام مفتاح على قيمة g.
إظهار التلميح
قم بتجميع أيام الأسبوع الخمسة في حالة واحدة مفصولة بفواصل.
الحل متاح بعد 3 من المحاولات
استخدم مفتاحًا بدون شرط لطباعة "neg" أو "صفر" أو "pos" اعتمادًا على x.
إظهار التلميح
لا يوجد تعبير بعد `switch`، فقط `{`.
الحل متاح بعد 3 من المحاولات
ماذا يطبع هذا البرنامج؟
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)للتمييز بناءً على النوع الديناميكي (وحدة الواجهات).