C# Academy · درس

تعبيرات switch والتحقق من الشمول باستخدام when (محاكاة C# 6)

حاكِ تعبيرات switch باستخدام أساليب switch تقليدية تُعيد القيم، وأضف فحوصات حارسة، واستخدم رميًا افتراضيًا لاكتشاف الحالات غير المعالجة وقت التشغيل.

الدرس 2 من 38 خطوة

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

خطة: محاكاة switch

الهدف: محاكاة تعبيرات switch الحديثة في C# 6.

  • إرجاع قيم من switch التقليدية
  • إجراء فحص مسبق باستخدام الشروط الحارسة
  • الفشل سريعًا عبر default throw لضمان شمول جميع الحالات

إرجاع قيمة من switch

تعمل تعليمة switch التي تعيد قيمة مثل تعبير switch. يلتقط default throw القيم غير المعروفة.

using System;

public enum Grade { A, B, C, D, F }

public class Program
{
  static string Describe(Grade g)
  {
    switch (g)
    {
      case Grade.A: return "Excellent";
      case Grade.B: return "Good";
      case Grade.C: return "Average";
      case Grade.D: return "Below average";
      case Grade.F: return "Fail";
      default: throw new ArgumentOutOfRangeException("g");
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(Describe(Grade.A));
    Console.WriteLine(Describe(Grade.F));
  }
}

“when” عبر فحوصات الحماية

استخدم فحوصات الحماية (ifs) لمحاكاة شروط when. تحقّق من المدخلات أولًا، ثم فرّع وفقًا للنطاقات.

using System;

public class Program
{
  // Emulate: switch(score) { case var s when s >= 90: ... } using pre-guards
  static string LabelScore(int score)
  {
    if (score < 0 || score > 100) throw new ArgumentOutOfRangeException("score");

    if (score >= 90) return "A";
    if (score >= 80) return "B";
    if (score >= 70) return "C";
    if (score >= 60) return "D";
    return "F";
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(LabelScore(92)); // A
    Console.WriteLine(LabelScore(77)); // C
  }
}

المساعد Exhaustive

أضف مساعدًا صغيرًا باسم Exhaustive.Unhandled واستدعِه في default. ستفشل الاختبارات عند عدم معالجة قيمة جديدة من التعداد.

using System;

public enum Status { New, Active, Closed }

public static class Exhaustive
{
  public static Exception Unhandled(object x)
  {
    return new InvalidOperationException("Unhandled case: " + x);
  }
}

public class Program
{
  static int ToHttp(Status s)
  {
    switch (s)
    {
      case Status.New: return 201;
      case Status.Active: return 200;
      case Status.Closed: return 410;
      default: throw Exhaustive.Unhandled(s);
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ToHttp(Status.Active)); // 200
  }
}

الحواجز + switch على kind

تحقّق من بيانات كل فرع باستخدام حواجز التحقق المسبق، ثم نفّذ switch على القيمة المميِّزة. يحاكي ذلك استخدام “when” مع الحالات.

using System;

public enum ShapeKind { Circle, Square }

public sealed class Shape
{
  public ShapeKind Kind;
  public double Radius; // for circle
  public double Side;   // for square
}

public class Program
{
  static double Area(Shape s)
  {
    if (s == null) throw new ArgumentNullException("s");

    // “when” guards (validate needed fields)
    if (s.Kind == ShapeKind.Circle && s.Radius < 0) throw new ArgumentException("Radius must be >= 0");
    if (s.Kind == ShapeKind.Square && s.Side < 0) throw new ArgumentException("Side must be >= 0");

    switch (s.Kind)
    {
      case ShapeKind.Circle: return Math.PI * s.Radius * s.Radius;
      case ShapeKind.Square: return s.Side * s.Side;
      default: throw new InvalidOperationException("Unhandled shape: " + s.Kind);
    }
  }

  public static void Main(string[] args)
  {
    Shape c = new Shape { Kind = ShapeKind.Circle, Radius = 2.0 };
    Console.WriteLine("Area circle = " + Area(c));
  }
}

نصائح ومزالق

نصائح:

  • فضّل الأساليب الصغيرة التي تعيد قيمًا (ذات المسؤولية الواحدة)
  • أبقِ default على رمي الاستثناءات لكشف الحالات المفقودة مبكرًا
  • ضع فحوصات الحماية قبل switch؛ فهي تؤدي دور شروط when

محاكاة شمولية الحالات

تحقّق سريع: في C# 6، كيف يمكنك محاكاة معالجة شاملة لحالات switch، على نحو مشابه لتعبير switch مع when؟

مراجعة

مراجعة: أعد القيمة من switch التقليدية كما في تعبير switch، وأضف فحوصات الحماية لمحاكاة “when”، وأبقِ default throw لكشف الحالات المفقودة.

البدء مجانًا

تعلم C# مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
93
الدروس
346

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

هل درس «تعبيرات switch والتحقق من الشمول باستخدام when (محاكاة C# 6)» مجاني؟

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

ماذا ستتعلم في «تعبيرات switch والتحقق من الشمول باستخدام when (محاكاة C# 6)»؟

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

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

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

كم من الوقت يستغرق درس «تعبيرات switch والتحقق من الشمول باستخدام when (محاكاة C# 6)»؟

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

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

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

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

  1. أنماط is والأنماط العلائقية والمنطقية (محاكاة C# 6)
  2. تعبيرات switch والتحقق من الشمول باستخدام when (محاكاة C# 6)
  3. نمذجة المجال باستخدام الاتحادات المميّزة (السجلات) — محاكاة C# 6
← العودة إلى C# Academy