لماذا يتطلب برنامج التحويل البرمجي C# عبارة BREKE في بناء التبديل؟
-
23-09-2019 - |
سؤال
أواجه صعوبة في الفهم ، لماذا يتطلب برنامج التحويل البرمجي استخدام عبارة Break. ليس من الممكن تفويتها لأن السقوط مسموح به الآن. أرى سبب الاستراحة في C أو C ++ ، ولكن هل هو مطلوب هنا.
لماذا ليس سلوكًا مدمجًا لكسر بعد انتهاء القضية؟ أليست مجرد بناء جملة بدون دلالي؟
آسف ، إذا كان سؤال غبي.
تحرير: لا يُسمح بالسقوط إلا عندما تكون القضية فارغة. عندما يكون هناك بيان لا يمكنك حذف بيان الاستراحة. لذلك ، إنها مسألة مختلفة.
المحلول
المترجم لا "يحتاج" إلى حد كبير بيانات الاستراحة ، فهو يطالبهم.
كان هذا قرارًا تصميمًا ، يمكن مقارنته بطلب استخدام ref
عند استدعاء طريقة باستخدام معلمة مرجعية.
إنه يحافظ على الكود بشكل دلالي من C و C ++ مع القضاء على مخاطر السقوط التي كانت دائمًا "ميزة" قابلة للنقاش للغات C.
نصائح أخرى
كان بيان الاستراحة في C# قرارًا تصميمًا من قبل المبدعين باللغة ... في الأساس أنهم أرادوا بيان استراحة "لا لبس فيه" ، وهو بيان استراحة من شأنه أن يعمل في اتجاه واحد فقط. باختصار ، لم يريدوا السقوط ، وإذا كانوا قد منعوا للتو من خلال السقوط دون تضمين "Break" ، فسيكون ذلك قد كسر التوافق مع C ++.
وقع خلال هو مسموح به إذا كان تعبير الحالة فارغًا:
case Foo: // fallthrough allowed.
case Bar:
Console.WriteLine ("Foo or Bar");
break; // required
أنه غير مسموح به هو فكرة خاطئة شائعة في نفس الدوري مثل "لا يمكنك تعيين القيم في ما إذا كانت الشروط" *
* تستطيع. القاعدة هي مجرد أن القيم المنطقية فقط مسموح بها في ما إذا كانت الشروط ، و x=false
مع bool x;
هو قيمة منطقية.
عادة ما يكون هذا النوع من الكود خطأ:
// Contrived calculator demostration
decimal x = 5m;
decimal y = 10m;
decimal result = 0m;
string blah = "Divide";
// .. other code omitted
switch(blah) {
case "Divide":
result = x / y;
case "Multiply":
result = x * y;
case "Add":
result = x + y;
case "Subtract":
result = x - y;
default:
MessageBox.Show("Not a valid operation");
}
ومع ذلك ، لا يمكن للمترجم أن يفترض أن الفواصل المفقودة هي خطأ. بقدر ما يعلم ، فأنت تريد حقًا أن تسقط الحالات.
ببساطة ، على افتراض أن الفواصل يجب أن تكون في نهاية كل حالة من شأنها أن تتداول خطأً واحدًا لخطأ مختلف.
لذا ، بدلاً من ذلك ، لم يسمح مصممو اللغة بالخروج من الحالات غير الفارغة ورمي خطأ إذا حذفتهم.
إذا كنت بحاجة إلى مشاركة رمز بين الحالات غير الفارغة ، فضعها في أ private
(ربما static
) طريقة واتصل بها من هناك.
ملاحظة أخيرة: الحالات الفارغة التي تتساقط هي كل ما يتوقع من قضية فارغة القيام بها ، وهذا هو السبب في أنه مسموح به.