ما هي الاستفادة من استخدام try {} catch {} مقابل if {} else {}

StackOverflow https://stackoverflow.com/questions/651619

  •  19-08-2019
  •  | 
  •  

سؤال

أنا التحول من عادي الخلية في php إلى شركة تنمية نفط عمان و لقد لاحظت أن الطريقة الشائعة لاختبار الأخطاء هو استخدام try / catch الجمع بدلا من أنا / آخر مجموعات.

ما هي الاستفادة من هذا الأسلوب ، هل يمكنني استخدام واحدة حاول / catch بدلا من عدة متداخلة إذا / آخر كتل للتعامل مع جميع أخطاء خطوات مختلفة (الاتصال ، إعداد ، تنفيذ ، الخ) ؟

هل كانت مفيدة؟

المحلول

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

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

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

نصائح أخرى

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

وتحرير: أيضا، سوف كتل الصيد لم يتوقف التعليمات البرمجية من وقف عند ضرب خطأ.

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

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

  1. يكون اسمه في مثل هذه الطريقة أنها أكثر وضوحا ما حدث من خطأ (إذا كنت أتذكر الحق ، PDO واحد فقط نوع الاستثناء ، لكن أنظمة أخرى تحتوي على عدة استثناء أنواع أنواع مختلفة من الأخطاء)

  2. أيار/مايو-يجب أن تحتوي على الأساليب والخصائص التي يمكن أن تساعدك على معرفة لماذا وقد تم طرح استثناء

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

وحاول / الصيد يفصل تماما الخطأ التعامل مع المنطق من منطق الأعمال الكائن.

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

وPerchik:

وفلسفتي العامة لمعالجة الأخطاء:

أنت <م> يجب استخدام إذا / آخر للتعامل مع جميع الحالات التي تتوقعها. يجب عليك <م> لا استخدام محاولة {} الصيد {} للتعامل مع كل شيء (في معظم الحالات) لأنه يمكن طرح استثناء مفيد ويمكنك معرفة المزيد عن وجود خلل من ذلك. أنت <م> يجب استخدام محاولة {} {} الصيد في الحالات التي كنت تشك في شيء يمكن / سوف تسوء، وكنت لا تريد أن اسقاط النظام برمته، مثل مشاكل الوصول إلى النظام مهلة / ملف الشبكة، ملفات غير موجود، وما إلى ذلك.

استثناءات الشائكة

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

ومنذ PDO تستخدم الأشياء، فهي رفع الاستثناءات إذا يحدث خطأ. وكانت mysqli ماي / القديمة مجرد وظائف ولم رمي الاستثناءات عادوا ببساطة رموز الخطأ. حاول / يستخدم الصيد عند استثناء يمكن طرح من التعليمات البرمجية، والتي قبض عليه في اللحاق الشرط، الذي هو وسيلة وجوه المنحى لمعالجة الأخطاء. لا يمكنك التقاط الاستثناءات مع إذا / شيء آخر كتل - أنها تشترك مع أي شيء حاول / catch

الجميع لديه إجابات جيدة - ولكن فكنت أود أن رمي بلدي في:

  1. حاول/Catch فعلية معالجة الاستثناء آلية - حتى إذا قمت بتغيير الاستثناءات الخاصة بك ، سوف يعمل تلقائيا على جميع حاول/catch البيانات.
  2. حاول/Catch يعطي الفرصة لتشغيل التعليمات البرمجية حتى في حالة استثناء كبيرا قد تقتل إذا/آخر بالإضافة إلى محاولة بيان يمكن التراجع (إذا كنت الدهاء).

في فب باستخدام محاولة الصيد مع الإرث، ونحن يمكن أن يلقي استثناء من فئة أخرى.

وعلى سبيل المثال: - أنا في controller والتحقق من صحة البيانات المستخدم باستخدام Models

إذا يتسبب أي خطأ، أنا فقط يجب أن رمي استثناء من أساليب Model.

وإعدام في محاولة وكسر وcatched في كتلة Catch.

وحتى لا يكون هناك أقل من النفقات العامة من العودة الوديان منطقي وفحص ذلك.

وبصرف النظر عن هذا Try Catch يعمل كبيرة عند استخدام في سلسلة (Try - Catch داخل Try - Catch آخر).

واتفق تماما معJared أبدايك

ويتم عادة معالجة الاستثناء مع المستخدم معرفة القليل أو لا شيء حول هذا الموضوع. من ناحية أخرى، يمكن للمستخدم من النظام يعلم ما يحدث داخل كتلة IF-آخر.

وعلى سبيل المثال. وينبغي أن يكون "آخر" شرط أن يظهر للمستخدم ATM، الرسالة "الرصيد المصرفي غير كافية" عندما توازنه منخفضة. وهذه الرسالة لا يمكن الجلوس داخل كتلة "الصيد" لأي سبب من الأسباب !!

ودعونا نقول نحن نكتب لأ / ب كود الانقسام وحالة الاستثناء الأكثر شهرة حدث أي خطأ 0 الانقسام، ما رأيك يمكن القيام به بعد ذلك؟  1. يمكنك طباعة رسالة والخروج.  2. يمكنك طباعة رسالة والسماح للمستخدم إعادة إدخال القيم، وما إلى ذلك.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top