ما الفرق بين عبارة switch في لغة Java ولغة C#؟

Jan 22, 2026

ترك رسالة

مرحبًا يا من هناك! باعتباري موردًا للمحولات، كنت أتعامل مع جميع أنواع المحولات في العالم الصناعي. ولكن اليوم، سأقوم بتبديل التروس قليلاً والتحدث عن شيء مختلف - الفرق بين عبارة التبديل في Java وC#. قد يبدو الأمر خارج نطاق عملي المعتاد، لكن ثق بي، فهم مفاهيم البرمجة هذه يمكن أن يمنحك في الواقع منظورًا أفضل حول كيفية عمل الأنظمة المختلفة، وهذا مفيد للغاية في مجال التبديل.

لنبدأ بالأساسيات. بيان التبديل في كل من Java وC# هو عبارة عن بيان تدفق تحكم يسمح لك بتحديد واحدة من العديد من كتل التعليمات البرمجية التي سيتم تنفيذها بناءً على قيمة التعبير. إنها مثل مفترق الطرق المتعدد في الطريق؛ اعتمادا على القيمة التي تتعامل معها، فإنك تأخذ مسارا مختلفا.

بناء الجملة والبنية

في Java، يبدو بناء الجملة الأساسي لبيان التبديل كما يلي:

6GK5008-0BA10-1AB2 Electrical Switch XB0086GK5008-0BA10-1AB2 Electrical Switch

التبديل (التعبير) { قيمة الحالة 1: // الكود الذي سيتم تنفيذه إذا كان التعبير == القيمة 1 استراحة؛ قيمة الحالة 2: // الكود الذي سيتم تنفيذه إذا كان التعبير == value2 فاصل؛ الافتراضي: // الكود الذي سيتم تنفيذه إذا كان التعبير لا يطابق أي حالة }

التعبيريمكن أن يكون من النوعبايت,قصير,شار,كثافة العمليات,التعدادأنواع,خيط(منذ Java 7)، وبعض فئات المجمعة مثلبايت,قصير,شخصية، وعدد صحيح. كلقضيةمتبوعة بقيمة محددة، واستراحةيتم استخدام العبارة للخروج من كتلة التبديل بمجرد العثور على تطابق. إذا نسيتاستراحة، سوف "يفشل" التنفيذ في الحالة التالية، مما قد يؤدي إلى بعض السلوكيات غير المتوقعة.

في C#، بناء الجملة مشابه تمامًا:

التبديل (التعبير) { قيمة الحالة 1: // الكود الذي سيتم تنفيذه إذا كان التعبير == القيمة 1 استراحة؛ قيمة الحالة 2: // الكود الذي سيتم تنفيذه إذا كان التعبير == value2 فاصل؛ الافتراضي: // الكود الذي سيتم تنفيذه إذا كان التعبير لا يطابق أي حالة }

ومع ذلك،تعبيرفي C# يمكن أن يكون من النوعاستبدال,بايت,قصير,قصير,كثافة العمليات,uint,طويل,رأس,شار,خيط,التعدادالأنواع والإصدارات الخالية من أنواع القيم هذه. وهذا نطاق أوسع مقارنةً بـ Java، مما يمنحك مرونة أكبر عند العمل مع أنواع بيانات مختلفة.

السقوط - من خلال السلوك

كما ذكرت سابقًا، فإن Java لديها سلوك سيء إذا لم تستخدماستراحةإفادة. على سبيل المثال:

عدد صحيح = 1؛ Switch(num) { الحالة 1: System.out.println("الحالة 1"); الحالة 2: System.out.println("الحالة 2"); استراحة؛ الافتراضي: System.out.println("الحالة الافتراضية"); }

في هذا الرمز، على الرغم منفي أهو 1، ستتم طباعة كل من "الحالة 1" و"الحالة 2" لأنه لا يوجداستراحةبعد الأولقضية.

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

عدد صحيح = 1؛ Switch(num) { case 1: Console.WriteLine("Case 1"); انتقل إلى الحالة 2؛ الحالة 2: Console.WriteLine("الحالة 2"); استراحة؛ الافتراضي: Console.WriteLine("الحالة الافتراضية"); }

مطابقة الأنماط (C# 7.0 والإصدارات الأحدث)

أحد الاختلافات الكبيرة بين Java وC# عندما يتعلق الأمر بعبارات التبديل هو أن C# قدمت مطابقة الأنماط في عبارات التبديل الخاصة بها بدءًا من C# 7.0. تسمح لك مطابقة الأنماط بالمطابقة ليس فقط على القيم البسيطة ولكن أيضًا على الشروط الأكثر تعقيدًا.

على سبيل المثال، يمكنك استخدام أنماط الكتابة:

كائن obj = "مرحبا"؛ Switch(obj) { سلسلة الحالة s: Console.WriteLine($"إنها سلسلة: {s}"); استراحة؛ الحالة int i: Console.WriteLine($"إنه عدد صحيح: {i}"); استراحة؛ الافتراضي: Console.WriteLine("إنه شيء آخر"); }

يمكنك أيضًا استخدام الأنماط الثابتة والأنماط العلائقية في الإصدارات الأحدث من C#. لا تمتلك Java هذا النوع من الأنماط المتقدمة - القدرة على المطابقة في بيانات التبديل الخاصة بها حتى الآن.

اعتبارات الأداء

فيما يتعلق بالأداء، تعمل كل من Java وC# على تحسين بيانات التبديل بشكل جيد. في جافا، عندماقضيةالقيم هي أعداد صحيحة متتالية، ويمكن للمترجم استخدامcom.tableswitchالتعليمات، والتي توفر الوصول المستمر إلى الوقت المناسبقضيةحاجز. بالنسبة للقيم غير المتتالية، فإنه يستخدمlookupwitchالتعليمات، والتي لديها تعقيد زمني لوغاريتمي.

يحتوي C# أيضًا على تحسينات مماثلة. يحاول المترجم استخدام جدول الانتقال للقيم المتتالية، وهو أمر سريع جدًا. بالنسبة للقيم غير المتتالية، يتم استخدام خوارزمية بحث ثنائية، والتي تتمتع أيضًا بأداء جيد.

التطبيقات الحقيقية - العالمية في أعمال التبديل

الآن، ربما تتساءل عن علاقة كل هذه الأشياء البرمجية بكونك موردًا للمحولات. حسنا، فكر في الأمر. في أنظمة الأتمتة الصناعية، غالبًا ما توجد برامج تحكم مكتوبة بلغة Java أو C#. تستخدم هذه البرامج عبارات التبديل لاتخاذ القرارات بناءً على قراءات المستشعر أو مدخلات المستخدم.

على سبيل المثال، إذا كنت تستخدمD4A - 3101N مفتاح حد للأغراض العامة، قد يستخدم برنامج التحكم عبارة التبديل لتحديد الإجراء الذي يجب اتخاذه بناءً على ما إذا كان المفتاح مفتوحًا أم مغلقًا. إذا كان المفتاح مغلقًا، فيمكن تشغيل المحرك؛ إذا كان مفتوحا، فإنه يمكن أن يوقف المحرك.

وبالمثل، فإن6GK5008 - 0BA10 - 1AB2 مقياس المفتاح الكهربائي XB008يمكن استخدامها في برنامج التحكم المتعلق بالشبكة. يمكن للبرنامج استخدام بيان التبديل للتعامل مع حالات الشبكة المختلفة التي أبلغ عنها المحول، مثل التشغيل العادي، أو حالة الخطأ، أو وضع الصيانة.

وD4A - 4501N D4A - 4510N مفتاح الحديمكن أن يكون جزءًا من نظام التحكم بالذراع الآلي. يمكن لبرنامج التحكم استخدام بيان التبديل لتحديد كيفية تحرك الذراع الآلية بناءً على الموضع الذي اكتشفه مفتاح الحد.

خاتمة

في الختام، في حين أن عبارات التبديل في Java وC# تشترك في الكثير من أوجه التشابه من حيث الوظائف الأساسية، إلا أن هناك بعض الاختلافات الرئيسية. تحتوي لغة #C على نطاق أوسع من أنواع البيانات لتعبيرات التبديل، ولا تسمح بالسقوط بشكل افتراضي، ولديها إمكانات متقدمة لمطابقة الأنماط. جافا، من ناحية أخرى، لديها سقوط أكثر تساهلاً - من خلال السلوك.

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

مراجع

  • "جافا الفعالة" بقلم جوشوا بلوخ
  • "C # في العمق" بقلم جون سكيت

إرسال التحقيق