Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المنطق البولياني المعقد

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 9 من 66.

يمكن أن يصبح المنطق البولياني معقداً عند دمج شروط متعددة. يساعد فهم أسبقية العمليات واستخدام الأقواس في كتابة تعبيرات واضحة وصحيحة.

ترتيب الأسبقية للمعاملات المنطقية في C# هو:

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

إليك مثال على تعبير منطقي (boolean) معقد:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

استخدم قوانين دي مورغان لتبسيط عمليات النفي المعقدة:

// بدلاً من:
if (!(age >= 18 && score > 70))
{
    // هذا يعادل:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

التقييم قصير الدائرة (Short-circuit evaluation): مع && و ||، تقوم لغة C# بتقييم ما هو ضروري فقط:

// إذا كان user فارغاً (null)، فلن تقوم لغة C# بتقييم الشرط الثاني
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

استخدم الأقواس الصريحة من أجل الوضوح، حتى عندما لا تكون مطلوبة بشكل صارم:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);
challenge icon

التحدي

متوسط

قم بإنشاء طريقة تسمى determineAccess تحدد ما إذا كان المستخدم يمتلك صلاحية الوصول إلى النظام بناءً على القواعد التالية:

  1. تأخذ خمسة معاملات:
    • isAdmin (bool): ما إذا كان المستخدم مسؤولاً (administrator)
    • isLoggedIn (bool): ما إذا كان المستخدم مسجلاً للدخول حالياً
    • timeOfDay (int): الساعة الحالية (0-23)
    • isMaintenanceMode (bool): ما إذا كان النظام في وضع الصيانة
    • hasEmergencyAccess (bool): ما إذا كان المستخدم يمتلك صلاحية وصول للطوارئ
  2. تعيد true عندما يتحقق أي من هذه الشروط:
    • المستخدم مسؤول (admin) وَ مسجل للدخول
    • الوقت خلال ساعات العمل (من 9 إلى 17 ضمناً) وَ المستخدم مسجل للدخول وَ النظام ليس في وضع الصيانة
    • المستخدم يمتلك صلاحية وصول للطوارئ

ورقة مرجعية

أسبقية العمليات المنطقية في C# (من الأعلى إلى الأقل):

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

التعبيرات المنطقية المعقدة:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

قوانين دي مورغان لتبسيط النفي:

// بدلاً من:
if (!(age >= 18 && score > 70))
{
    // هذا يعادل:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

يمنع التقييم ذو الدائرة القصيرة (Short-circuit evaluation) الأخطاء من خلال تقييم ما هو ضروري فقط:

// إذا كان user هو null، فلن تقوم C# بتقييم الشرط الثاني
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

استخدم الأقواس الصريحة للوضوح:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);

جرّب بنفسك

public class DetermineAccess
{
    // قم بتنفيذ دالة determineAccess
    public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
    {
        // اكتب الكود الخاص بك هنا
        
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow