0Pricing
C# Academy · درس

الأنماط العلاقية والمنطقية

اجمع الشروط في الأنماط

الأنماط العلاقية والمنطقية درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

الأنماط العلاقية

يقارن النمط العلاقي المدخل بثابت باستخدام < أو > أو <= أو >=. ويطابق عندما تكون المقارنة صحيحة.

ظهرت الأنماط العلاقية في C# 9، وهي تجعل فحوص النطاقات موجزة في فروع switch وتعبيرات is، من دون كتابة مقارنات صريحة.

int temp = 18;
string level = temp switch
{
    < 0  => "freezing",
    < 15 => "cold",
    < 25 => "mild",
    _    => "hot"
};
System.Console.WriteLine(level);

الأنماط العلاقية مع is

تعمل الأنماط العلاقية أيضًا في تعبيرات is، فتوفّر فحوصًا منطقية سهلة القراءة.

تُقرأ n is > 0 تقريبًا كما تُقرأ جملة إنجليزية، وتُرجع قيمة من النوع bool يمكنكم استخدامها في الشروط أو عمليات الإسناد أو مسندات LINQ.

using System;

class Program {
    static void Main() {
        int score = 82;
        bool passed = score is >= 60;
        Console.WriteLine(passed);
    }
}

النمط and

يتطلب النمط المنطقي and تطابق كلا النمطين الفرعيين. وهو مثالي للنطاقات المحددة بحدّين.

يطابق >= 1 and <= 12 القيم الواقعة ضمن نطاق شامل. ومن دون and، يستحيل التعبير عن حدّين في نمط واحد.

int month = 6;
bool valid = month is >= 1 and <= 12;
System.Console.WriteLine(valid);

النمط or

يطابق النمط المنطقي or عندما يطابق أيٌّ من النمطين الفرعيين. وهو يجمع القيم البديلة في فرع واحد.

بدلًا من تكرار الفروع للحالات المترابطة، يختصر 'a' or 'e' or 'i' تلك الحالات. وهذا يحافظ على إيجاز تعبيرات switch ويُظهر الغرض منها بوضوح.

char c = 'e';
string kind = c switch
{
    'a' or 'e' or 'i' or 'o' or 'u' => "vowel",
    _ => "consonant"
};
System.Console.WriteLine(kind);

النمط not

يطابق النمط المنطقي not عندما لا يطابق نمطه الفرعي. وأكثر استخداماته شيوعًا هو not null.

كما ينفي أنماطًا أخرى، مثل not 0 أو not (> 100)، ما يتيح لكم التعبير عن الاستبعادات بوضوح داخل فرع واحد.

object? value = "hi";
if (value is not null)
    System.Console.WriteLine("present");

دمج الأنماط المنطقية

يمكن تركيب الأنماط المنطقية معًا. ويمكنكم تسلسل and وor وnot لإنشاء شروط غنية، مع استخدام الأقواس للتحكم في أسبقية التنفيذ.

الأسبقية هي: يرتبط not بأعلى أسبقية، يليه and، ثم or. أضيفوا الأقواس كلما كان المقصود قابلًا للالتباس.

using System;

class Program {
    static string Classify(int n) => n switch {
        < 0 or > 100 => "out of range",
        >= 0 and <= 50 => "low half",
        _ => "high half"
    };
    static void Main() => Console.WriteLine(Classify(75));
}

النطاقات في التقدير

تُمثّل الأنماط العلاقية والمنطقية معًا جداول التقدير التقليدية بطريقة واضحة.

وبما أن الفروع تُفحص من الأعلى إلى الأسفل، يمكنكم استخدام حدود علوية بسيطة، أو دمج الحدود باستخدام and لإنشاء نطاقات صريحة. كلا الأسلوبين صحيح؛ فاختاروا الأوضح.

using System;

class Program {
    static char Grade(int s) => s switch {
        >= 90 => 'A',
        >= 80 and < 90 => 'B',
        >= 70 and < 80 => 'C',
        _ => 'F'
    };
    static void Main() => Console.WriteLine(Grade(85));
}

استخدام not null مع أنماط الخصائص

يؤدي دمج not null مع أنماط الأنواع والخصائص إلى شروط حراسة آمنة ومعبرة.

يطابق obj is Person { Name: not null } p كائن Person غير الفارغ الذي لا تكون خاصية Name فيه فارغة أيضًا، ويربطه بالمتغير. وهذا يتجنب فحوص null المتسلسلة.

record Person(string? Name);

object obj = new Person("Kai");
if (obj is Person { Name: not null } p)
    System.Console.WriteLine(p.Name);

نفي النطاقات

يمكنكم نفي مجموعة علائقية باستخدام not والأقواس للتعبير عن الاستبعادات.

يطابق not (>= 1 and <= 5) أي قيمة خارج النطاق من 1 إلى 5. وقد يقرأ بعض القراء هذا بصورة مباشرة أكثر من التعبير المكافئ < 1 or > 5.

using System;

class Program {
    static void Main() {
        int n = 9;
        bool outside = n is not (>= 1 and <= 5);
        Console.WriteLine(outside);
    }
}

الدمج مع أنماط الأنواع

يمكن للأنماط المنطقية أن تنضم إلى أنماط الأنواع أيضًا. يطابق o is int or long الأنواع العددية الصحيحة في فحص واحد.

يفيد هذا في التعامل مع عدة أنواع مترابطة بطريقة موحّدة. لاحظوا أن طرفي or يجب أن يكونا متوافقين مع طريقة استخدام النتيجة.

object o = 5L;
string kind = o switch
{
    int or long => "integral",
    float or double => "floating",
    _ => "other"
};
System.Console.WriteLine(kind);

إرشادات قابلية القراءة

الأنماط المنطقية معبّرة، لكنها قد تصبح كثيفة. احرصوا على إبقاء الفروع قصيرة، وفضّلوا استخدام النطاقات مع and، وضعوا الأقواس حول التركيبات التي تمزج بين and وor لتحسين الوضوح.

عندما يحتاج الشرط إلى العديد من العبارات أو إلى متغيرات خارجية، قد تكون حراسة when أسهل قراءة من نمط منطقي طويل. اختاروا الصيغة التي توضّح القصد بشكل أفضل.

int n = 42;
string r = n switch
{
    > 0 and < 10 when n % 2 == 0 => "small even",
    _ => "other"
};
System.Console.WriteLine(r);

اختبار سريع

اختبروا فهمكم للأنماط العلاقية والمنطقية.

مراجعة

تقارن الأنماط العلاقية (< > <= >=) القيم بالثوابت. وتجمع الأنماط المنطقية الأنماط الفرعية باستخدام and وor وnot.

ترتيب الأولوية هو not ثم and ثم or؛ لذا ضعوا الأقواس عند المزج بينها. سنتناول بعد ذلك أنماط القوائم وtuple.

الأسئلة الشائعة

هل درس «الأنماط العلاقية والمنطقية» مجاني؟

نعم — نص درس «الأنماط العلاقية والمنطقية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «الأنماط العلاقية والمنطقية»؟

اجمع الشروط في الأنماط تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الأنماط العلاقية والمنطقية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعبيرات switch
  2. أنماط النوع والخاصية
  3. الأنماط العلاقية والمنطقية
  4. أنماط القوائم وTuples
← العودة إلى C# Academy