الجمل الشرطية (If/Else & Switch): التحكم في مسار البرنامج بأكواد نظيفة


ماذا سنتعلم اليوم؟ سنتعلم كيف نتحكم في مسار تنفيذ برامجنا باستخدام الجمل الشرطية If/Else و Switch، وكيف نكتب أكواداً نظيفة ومنظمة لتحقيق ذلك.

الخطوة 1: أساسيات If/Else لاتخاذ القرارات البسيطة

نبدأ بفهم كيفية استخدام If/Else لاتخاذ قرارات بسيطة بناءً على شروط معينة. هذه الجملة تسمح لبرنامجك بتنفيذ كتلة معينة من الكود إذا كان الشرط صحيحاً، وكتلة أخرى إذا كان خاطئاً.

package main

import "fmt"

func main() {
    عدد_للفحص := 10 // تعريف متغير وتعيين قيمة له

    // جملة If/Else للتحقق مما إذا كان العدد موجباً
    if عدد_للفحص > 0 { // الشرط: هل قيمة عدد_للفحص أكبر من صفر؟
        fmt.Println("العدد موجب.") // إذا كان الشرط صحيحاً، اطبع هذه الرسالة
    } else { // إذا لم يكن الشرط (عدد_للفحص > 0) صحيحاً
        fmt.Println("العدد ليس موجباً (ربما سالب أو صفر).") // اطبع هذه الرسالة
    }

    عدد_للفحص = -5 // تغيير قيمة المتغير لاختبار حالة أخرى
    if عدد_للفحص > 0 {
        fmt.Println("العدد موجب.")
    } else {
        fmt.Println("العدد ليس موجباً (ربما سالب أو صفر).")
    }
}

في هذا الكود، نتحقق مما إذا كان المتغير عدد_للفحص موجباً. إذا كان كذلك، تُطبع رسالة "العدد موجب.". وإلا (أي إذا كان سالباً أو صفراً)، تُطبع رسالة "العدد ليس موجباً...".

ملاحظة تقنية: يمكن استخدام If بدون Else إذا كان هناك إجراء واحد فقط يجب تنفيذه عند تحقق الشرط. على سبيل المثال: if x > 0 { fmt.Println("موجب") }.

الخطوة 2: If/Else If/Else للتعامل مع شروط متعددة

عندما نحتاج لاختبار عدة شروط متتالية، نستخدم سلسلة If/Else If/Else. هذا يسمح لنا بتعريف مسارات تنفيذ مختلفة بناءً على مجموعة من الشروط المتعارضة.

package main

import "fmt"

func main() {
    درجة_الطالب := 85 // تعريف درجة الطالب

    // سلسلة If/Else If/Else لتحديد تقدير الطالب
    if درجة_الطالب >= 90 { // الشرط الأول: هل الدرجة 90 أو أعلى؟
        fmt.Println("تقدير الطالب: A ممتاز!")
    } else if درجة_الطالب >= 80 { // الشرط الثاني: هل الدرجة 80 أو أعلى؟ (إذا لم يتحقق الشرط الأول)
        fmt.Println("تقدير الطالب: B جيد جداً.")
    } else if درجة_الطالب >= 70 { // الشرط الثالث: هل الدرجة 70 أو أعلى؟
        fmt.Println("تقدير الطالب: C جيد.")
    } else if درجة_الطالب >= 60 { // الشرط الرابع: هل الدرجة 60 أو أعلى؟
        fmt.Println("تقدير الطالب: D مقبول.")
    } else { // إذا لم يتحقق أي من الشروط السابقة
        fmt.Println("تقدير الطالب: F راسب.")
    }

    درجة_الطالب = 55 // اختبار درجة أخرى
    if درجة_الطالب >= 90 {
        fmt.Println("تقدير الطالب: A ممتاز!")
    } else if درجة_الطالب >= 80 {
        fmt.Println("تقدير الطالب: B جيد جداً.")
    } else if درجة_الطالب >= 70 {
        fmt.Println("تقدير الطالب: C جيد.")
    } else if درجة_الطالب >= 60 {
        fmt.Println("تقدير الطالب: D مقبول.")
    } else {
        fmt.Println("تقدير الطالب: F راسب.")
    }
}

هنا، يتم تقييم الشروط بالترتيب. بمجرد أن يتحقق شرط واحد، يتم تنفيذ كتلته ويتوقف تقييم باقي الشروط في السلسلة.

الخطوة 3: جملة Switch للتعامل مع حالات متعددة بكفاءة

تعتبر جملة Switch بديلاً أنيقاً لسلسلة طويلة من If/Else If عندما نقارن متغيراً واحداً بقيم متعددة محددة. إنها تجعل الكود أكثر قابلية للقراءة والتنظيم.

package main

import "fmt"

func main() {
    اليوم_الرقمي := 3 // تعريف متغير يمثل رقم اليوم (1 للأحد، 2 للإثنين وهكذا)
    اليوم_النصي := "" // متغير لتخزين اسم اليوم المقابل

    // جملة Switch لتحديد اسم اليوم بناءً على رقمه
    switch اليوم_الرقمي { // بدء جملة Switch على المتغير اليوم_الرقمي
    case 1: // إذا كانت قيمة اليوم_الرقمي هي 1
        اليوم_النصي = "الأحد"
    case 2: // إذا كانت قيمة اليوم_الرقمي هي 2
        اليوم_النصي = "الإثنين"
    case 3: // إذا كانت قيمة اليوم_الرقمي هي 3
        اليوم_النصي = "الثلاثاء"
    case 4: // إذا كانت قيمة اليوم_الرقمي هي 4
        اليوم_النصي = "الأربعاء"
    case 5: // إذا كانت قيمة اليوم_الرقمي هي 5
        اليوم_النصي = "الخميس"
    case 6: // إذا كانت قيمة اليوم_الرقمي هي 6
        اليوم_النصي = "الجمعة"
    case 7: // إذا كانت قيمة اليوم_الرقمي هي 7
        اليوم_النصي = "السبت"
    default: // إذا لم تتطابق أي من الحالات (case) السابقة
        اليوم_النصي = "يوم غير صالح"
    }
    fmt.Printf("اليوم هو: %s\n", اليوم_النصي) // طباعة اسم اليوم المحدد

    اليوم_الرقمي = 9 // اختبار رقم يوم غير صالح
    switch اليوم_الرقمي {
    case 1:
        اليوم_النصي = "الأحد"
    case 2:
        اليوم_النصي = "الإثنين"
    case 3:
        اليوم_النصي = "الثلاثاء"
    case 4:
        اليوم_النصي = "الأربعاء"
    case 5:
        اليوم_النصي = "الخميس"
    case 6:
        اليوم_النصي = "الجمعة"
    case 7:
        اليوم_النصي = "السبت"
    default:
        اليوم_النصي = "يوم غير صالح"
    }
    fmt.Printf("اليوم هو: %s\n", اليوم_النصي)
}

تُقيّم جملة Switch التعبير (في حالتنا، اليوم_الرقمي) وتطابق قيمته مع قيم case المختلفة. عندما يتم العثور على تطابق، يتم تنفيذ الكود داخل تلك الحالة.

ملاحظة تقنية: في لغة Go، لا تحتاج جملة Switch إلى كلمة break بعد كل case لأنها تخرج تلقائياً بعد تنفيذ الحالة المطابقة. لاستمرار التنفيذ إلى الحالة التالية، يمكن استخدام الكلمة المفتاحية fallthrough (وذلك نادر الاستخدام ويجب التعامل معه بحذر).

الكود النهائي الكامل

إليك السكربت كاملاً، يجمع الأمثلة الثلاثة التي تعلمناها.

package main

import "fmt"

func main() {
    // --- مثال If/Else: التحقق من إشارة العدد ---
    fmt.Println("\n--- مثال If/Else ---")
    عدد_للفحص_1 := 10
    if عدد_للفحص_1 > 0 {
        fmt.Println("العدد 10 موجب.")
    } else {
        fmt.Println("العدد 10 ليس موجباً.")
    }

    عدد_للفحص_2 := -5
    if عدد_للفحص_2 > 0 {
        fmt.Println("العدد -5 موجب.")
    } else {
        fmt.Println("العدد -5 ليس موجباً.")
    }

    // --- مثال If/Else If/Else: نظام التقديرات الدراسية ---
    fmt.Println("\n--- مثال If/Else If/Else ---")
    درجة_الطالب_المثال_1 := 85
    if درجة_الطالب_المثال_1 >= 90 {
        fmt.Println("تقدير الطالب (85): A ممتاز!")
    } else if درجة_الطالب_المثال_1 >= 80 {
        fmt.Println("تقدير الطالب (85): B جيد جداً.")
    } else if درجة_الطالب_المثال_1 >= 70 {
        fmt.Println("تقدير الطالب (85): C جيد.")
    } else if درجة_الطالب_المثال_1 >= 60 {
        fmt.Println("تقدير الطالب (85): D مقبول.")
    } else {
        fmt.Println("تقدير الطالب (85): F راسب.")
    }

    درجة_الطالب_المثال_2 := 55
    if درجة_الطالب_المثال_2 >= 90 {
        fmt.Println("تقدير الطالب (55): A ممتاز!")
    } else if درجة_الطالب_المثال_2 >= 80 {
        fmt.Println("تقدير الطالب (55): B جيد جداً.")
    } else if درجة_الطالب_المثال_2 >= 70 {
        fmt.Println("تقدير الطالب (55): C جيد.")
    } else if درجة_الطالب_المثال_2 >= 60 {
        fmt.Println("تقدير الطالب (55): D مقبول.")
    } else {
        fmt.Println("تقدير الطالب (55): F راسب.")
    }

    // --- مثال Switch: تحديد اسم اليوم من رقمه ---
    fmt.Println("\n--- مثال Switch ---")
    اليوم_الرقمي_المثال_1 := 3
    اليوم_النصي_المثال_1 := ""
    switch اليوم_الرقمي_المثال_1 {
    case 1:
        اليوم_النصي_المثال_1 = "الأحد"
    case 2:
        اليوم_النصي_المثال_1 = "الإثنين"
    case 3:
        اليوم_النصي_المثال_1 = "الثلاثاء"
    case 4:
        اليوم_النصي_المثال_1 = "الأربعاء"
    case 5:
        اليوم_النصي_المثال_1 = "الخميس"
    case 6:
        اليوم_النصي_المثال_1 = "الجمعة"
    case 7:
        اليوم_النصي_المثال_1 = "السبت"
    default:
        اليوم_النصي_المثال_1 = "يوم غير صالح"
    }
    fmt.Printf("اليوم رقم %d هو: %s\n", اليوم_الرقمي_المثال_1, اليوم_النصي_المثال_1)

    اليوم_الرقمي_المثال_2 := 9
    اليوم_النصي_المثال_2 := ""
    switch اليوم_الرقمي_المثال_2 {
    case 1:
        اليوم_النصي_المثال_2 = "الأحد"
    case 2:
        اليوم_النصي_المثال_2 = "الإثنين"
    case 3:
        اليوم_النصي_المثال_2 = "الثلاثاء"
    case 4:
        اليوم_النصي_المثال_2 = "الأربعاء"
    case 5:
        اليوم_النصي_المثال_2 = "الخميس"
    case 6:
        اليوم_النصي_المثال_2 = "الجمعة"
    case 7:
        اليوم_النصي_المثال_2 = "السبت"
    default:
        اليوم_النصي_المثال_2 = "يوم غير صالح"
    }
    fmt.Printf("اليوم رقم %d هو: %s\n", اليوم_الرقمي_المثال_2, اليوم_النصي_المثال_2)
}

النتيجة المتوقعة

عند تشغيل الكود النهائي الكامل، ستحصل على المخرجات التالية على الشاشة، والتي توضح كيفية تحكم الجمل الشرطية في مسار البرنامج بناءً على القيم المدخلة:

--- مثال If/Else ---
العدد 10 موجب.
العدد -5 ليس موجباً.

--- مثال If/Else If/Else ---
تقدير الطالب (85): B جيد جداً.
تقدير الطالب (55): F راسب.

--- مثال Switch ---
اليوم رقم 3 هو: الثلاثاء
اليوم رقم 9 هو: يوم غير صالح