[Java] لماذا لا يتم التحقق من الاستثناءات .NET؟


Answers

في المقال "مشكلة مع استثناءات التحقق" وفي أندرس هيجلسبرغ (مصمم اللغة C #) صوت الخاصة، وهناك ثلاثة أسباب رئيسية ل C # لا تدعم الاستثناءات المحددة كما يتم العثور عليها والتحقق منها في جافا:

  • محايد على الاستثناءات المحددة

    "C # هو صامت في الأساس على قضية الاستثناءات المحددة. وبمجرد أن يكون هناك حل أفضل معروف - وثق بي أننا ما زلنا نفكر في ذلك - يمكننا أن نعود ونضع شيئا في الواقع ".

  • الإصدار باستخدام استثناءات تم التحقق منها

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

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

  • قابلية الاستثناءات المحددة

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

في مقاله " لماذا لا C # لديها مواصفات استثناء؟أنسون هورتون (فيسوال C # مدير البرنامج) يسرد أيضا الأسباب التالية (انظر المقال للحصول على تفاصيل عن كل نقطة):

  • الإصدارات
  • الإنتاجية ونوعية التعليمات البرمجية
  • عدم التمييز بين تصنيف مؤلف الدراسة وبين الاستثناءات المحددة وغير المحددة
  • صعوبة تحديد الاستثناءات الصحيحة للواجهات البينية.

ومن المثير للاهتمام أن نلاحظ أن C # لا، ومع ذلك، ودعم وثائق الاستثناءات التي ألقيت من خلال طريقة معينة عن طريق علامة <exception> والمترجم حتى يأخذ مشكلة للتحقق من أن نوع الاستثناء المشار إليه موجود بالفعل. ومع ذلك، لا يوجد أي فحص في مواقع الاتصال أو استخدام الأسلوب.

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

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

وأخيرا، بروس إكيل ، مؤلف التفكير في جافا ، لديه مقال يسمى " هل جافا تحتاج استثناءات فحص؟ "، التي قد تكون تستحق القراءة أيضا لأن السؤال لماذا استثناءات فحص ليست هناك في C # عادة ما يتجذر في مقارنات جافا.

Question

أعرف غوغلينغ يمكنني العثور على إجابة مناسبة، ولكني أفضل الاستماع إلى آراءك الشخصية (وربما الفنية).
ما هو السبب الرئيسي للفرق بين جافا و C # في رمي الاستثناءات؟
في جافا، يجب أن يكون التوقيع على أسلوب يلقي استثناء على استخدام الكلمة الرئيسية "رميات"، بينما في C # لا تعرف في وقت تجميع إذا كان يمكن طرح استثناء.




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




ومن المثير للاهتمام، وقد أضاف الرجال في ميكروسوفت ريزارتش استثناءات فحصها ل سبيك # ، مجموعة من C #.




أحيانا أفتقد الاستثناءات المحددة في C # /. نيت.

أفترض إلى جانب جافا لا منصة أخرى ملحوظة لهم. ربما الرجال .NET ذهبت للتو مع تدفق ...




ذهبت من جافا إلى C # بسبب تغيير الوظيفة. في البداية، كنت قلقا قليلا حول الفرق، ولكن في الممارسة العملية، فإنه لم يحدث فرقا.

ربما، لأنني جئت من C ++، الذي يحتوي على إعلان الاستثناء، لكنه لا يشيع استخدامها. أنا أكتب كل سطر واحد من التعليمات البرمجية كما لو كان يمكن رمي - دائما استخدام باستخدام حول المتاح والتفكير في تنظيف يجب أن أفعل في النهاية.

في وقت لاحق نشر إعلان رميات في جاوة لم تحصل حقا لي أي شيء.

أود أن أقول طريقة أن وظيفة لا يلقي أبدا - أعتقد أن هذا سيكون أكثر فائدة.