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

إذا، وإلا، وبيانات init

في Go، تعتبر صيغة if هي الصيغة الكلاسيكية ولكن مع وجود اختلافين مهمين مقارنةً بـ C/Java: لا توجد أقواس حول الشرط، و القدرة على الإعلان عن متغير مؤقت مباشرة في ملف if (بيان الحرف الأول).

بناء الجملة الأساسي

Go
if temperatura > 30 {
    fmt.Println("caldo")
} else if temperatura > 20 {
    fmt.Println("mite")
} else {
    fmt.Println("fresco")
}

الأقواس إلزامية، حتى بالنسبة للكتل ذات السطر الواحد. ال يجب أن يكون الشرط من النوع bool: لا يوجد "صدق" مثل Python أو JS.

Go
n := 0
// if n { ... }   // ERRORE: int non è bool
if n != 0 { ... }  // ok

بيان init: النطاق يقتصر على if

يمكنك إعلان أن المتغير صالح فقط داخل if/else، فصلها عن الشرط بـ ;:

Go
if v, err := call(); err == nil {
    fmt.Println("ok", v)
} else {
    fmt.Println("ko", err)
}
// qui v ed err NON esistono più

إنه النمط الاصطلاحي لمعالجة الأخطاء دون تلويث النطاق الخارجي.

التظليل في نطاق if

إذا حصل المتغير الخارجي على "مظلل" بواسطة الحرف init، فسيكون بالداخل إذا فاز الإصدار المحلي. وبعد ذلك مباشرة، يعود الجزء الخارجي إلى الظهور.

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)  // mai stampato (3 < 5)
} else {
    fmt.Println("else:", x)    // 3
}
fmt.Println("dopo:", x)         // 10 — quella esterna

لا يوجد مشغل ثلاثي

لا يحتوي Go على cond ? a : b. بالنسبة للمهام المشروطة، تحتاج إلى if/else في 3-4 أسطر - إنه اختيار تصميمي لصالح سهولة القراءة.

Go
var label string
if age >= 18 {
    label = "adulto"
} else {
    label = "minore"
}

جربه

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

اطبع "positivo" أو "صفر" أو "negativo" اعتمادًا على قيمة n.

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

`if / else if / else` سلسلة مع الشروط الموجودة على العلامة.

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

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

استخدم عبارة init للإعلان عن v := 42 في if وقم بطباعتها فقط إذا كانت v >= 18.

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

بناء الجملة: `إذا كان الحرف الأول؛ الشرط { ... }`.

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

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

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

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
خيارات الإجابة

خلاصة

  • الشروط بدون قوسين، الأقواس إلزامية دائما.
  • يجب أن يكون الشرط محمي_INLINE_13: لا يوجد صدق ضمني.
  • الحرف الأول if v, err := f(); err == nil { ... } يحد من نطاق v وerr.
  • التظليل في الحرف الأول: احرص على عدم تظليل المتغيرات الخارجية.
  • لا يوجد ثلاثي: اكتب if/else موسعًا.