المنطق البولياني المعقد
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 9 من 66.
يمكن أن يصبح المنطق البولياني معقداً عند دمج شروط متعددة. يساعد فهم أسبقية العمليات واستخدام الأقواس في كتابة تعبيرات واضحة وصحيحة.
ترتيب الأسبقية للمعاملات المنطقية في C# هو:
- NOT (!)
- AND (&&)
- 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);التحدي
متوسطقم بإنشاء طريقة تسمى determineAccess تحدد ما إذا كان المستخدم يمتلك صلاحية الوصول إلى النظام بناءً على القواعد التالية:
- تأخذ خمسة معاملات:
- isAdmin (bool): ما إذا كان المستخدم مسؤولاً (administrator)
- isLoggedIn (bool): ما إذا كان المستخدم مسجلاً للدخول حالياً
- timeOfDay (int): الساعة الحالية (0-23)
- isMaintenanceMode (bool): ما إذا كان النظام في وضع الصيانة
- hasEmergencyAccess (bool): ما إذا كان المستخدم يمتلك صلاحية وصول للطوارئ
- تعيد true عندما يتحقق أي من هذه الشروط:
- المستخدم مسؤول (admin) وَ مسجل للدخول
- الوقت خلال ساعات العمل (من 9 إلى 17 ضمناً) وَ المستخدم مسجل للدخول وَ النظام ليس في وضع الصيانة
- المستخدم يمتلك صلاحية وصول للطوارئ
ورقة مرجعية
أسبقية العمليات المنطقية في C# (من الأعلى إلى الأقل):
- NOT (!)
- AND (&&)
- 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)
{
// اكتب الكود الخاص بك هنا
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null