من الناحية العملية، تعد معالجة الاستثناءات أكثر من مجرد معرفة بناء الجملة. تعد كتابة تعليمات برمجية قوية بمثابة فن، وفي هذه المقالة، ستتم مناقشة أفضل ممارسات التعامل مع استثناءات Java. تتبع أفضل ممارسات Java مكتبات JDK القياسية والعديد من الأكواد مفتوحة المصدر لمعالجة الأخطاء والاستثناءات. وهو أيضًا دليل مفيد لمبرمجي Java لكتابة تعليمات برمجية قوية. أفضل الممارسات لمعالجة الاستثناءات في برمجة Java
فيما يلي مجموعتي التي تضم أفضل 10 ممارسات لمعالجة الاستثناءات في برمجة Java. هناك مدح وانتقادات للاستثناءات المحددة في برمجة Java، وهي إحدى وظائف اللغة. في هذه المقالة، سنحاول تقليل استخدام الاستثناءات المحددة وتعلم كيفية استخدام الاستثناءات المحددة مقابل الاستثناءات غير المحددة في برمجة Java.
1) استخدم الاستثناءات المحددة للأخطاء القابلة للاسترداد والأخطاء غير المحددة لأخطاء البرمجة.
يعد اختيار الاستثناءات المحددة أو غير المحددة أمرًا مربكًا دائمًا لمبرمجي Java. تضمن الاستثناءات المحددة توفير كود معالجة الاستثناءات لحالات الخطأ. وهذه طريقة من اللغة لإجبارك على كتابة تعليمات برمجية قوية، ولكنها أيضًا تسبب الكثير من الفوضى وتجعلها غير قابلة للقراءة. وبطبيعة الحال، فإن اكتشاف الاستثناءات والقيام بشيء حيالها يبدو معقولاً إذا كان لديك استراتيجية الاستبدال والاسترداد. اختر بين الاستثناءات المحددة أو استثناءات وقت التشغيل في برمجة Java لمزيد من المعلومات، راجع الاستثناءات المحددة مقابل الاستثناءات غير المحددة.
2) إغلاق الموارد أو تحريرها في الكتلة النهائية
تعد هذه إحدى أفضل الممارسات المعروفة في برمجة Java وهي تعادل المعيار عند التعامل مع فئات الشبكة وفئات الإدخال/الإخراج. يضمن إغلاق الموارد في الكتلة الأخيرة إطلاقًا معقولًا للموارد المتاحة والنادرة سابقًا في ظل ظروف التنفيذ العادية وغير الطبيعية، وهو ما تضمنه الكتلة الأخيرة. بدءًا من Java 7، تتمتع اللغة بميزة أكثر إثارة للاهتمام: يمكن لأتمتة إدارة الموارد أو كتل ARM تنفيذ هذه الميزة. ومع ذلك، لا يزال يتعين علينا أن نتذكر إغلاق الموارد في الكتلة الأخيرة، وهو أمر مهم لتحرير موارد محدودة مثل FileDescriptors، والتي تُستخدم في حالات برمجة المقبس والملفات.
3) قم بتضمين سبب الاستثناء في تتبع المكدس
في كثير من الأحيان، تقوم مكتبات Java والتعليمات البرمجية مفتوحة المصدر بدمج استثناء في آخر عندما يتم طرح استثناء ناتج عن استثناء آخر. يصبح تسجيل وطباعة استثناءات الجذر أمرًا مهمًا للغاية. توفر فئة استثناء Java طريقة getCause() لاسترداد سبب الاستثناء، والتي يمكن أن توفر مزيدًا من المعلومات حول سبب الاستثناء على المستوى الجذري. تعتبر ممارسة Java هذه مفيدة جدًا عند تصحيح الأخطاء أو استكشاف الأخطاء وإصلاحها. تذكر دائمًا أنه إذا قمت بلف استثناء إلى استثناء آخر، فيجب عليك تمرير الاستثناء المصدر عند إنشاء استثناء جديد.
4) قدم دائمًا معلومات مفيدة وكاملة حول الاستثناء
تعتبر معلومات الاستثناء هي المكان الأكثر أهمية لأنها أول مكان يراه المبرمج وهنا يمكنك العثور على السبب الجذري للمشكلة. يتم توفير المعلومات الدقيقة والأصلية هنا دائمًا. على سبيل المثال، قارن بين رسالتي الاستثناء للاستثناء IllegalArgumentException:
الرسالة 1: "وسيطة غير صحيحة للطريقة"
الرسالة 2: "قيمة غير قانونية لـ ${argument}: ${value}
تشير الرسالة الأولى فقط إلى أن المعلمة غير قانونية أو غير صحيحة، لكن الرسالة الثانية تتضمن اسم المعلمة وقيمتها غير القانونية، وهو أمر مهم للعثور على سبب الخطأ. اتبع دائمًا أفضل ممارسات Java عند كتابة تعليمات برمجية لمعالجة الاستثناءات في برمجة Java.
5) تجنب الإفراط في استخدام الاستثناءات المحددة
تتمتع الاستثناءات المحددة بمزايا معينة في فرض التنفيذ، ولكنها أيضًا تكسر الكود وتجعل الكود أقل قابلية للقراءة عن طريق إخفاء منطق الأعمال. طالما أنك لا تبالغ في استخدام الاستثناءات المحددة، يمكنك تقليل هذه المواقف، والنتيجة هي كود أنظف. يمكنك أيضًا استخدام ميزات Java 7 الجديدة مثل كتلة التقاط واحدة لاستثناءات متعددة وإدارة الموارد تلقائيًا لإزالة التكرارات.
6) تحويل الاستثناءات المحددة إلى استثناءات وقت التشغيل
هذه إحدى التقنيات المستخدمة للحد من استخدام الاستثناءات المحددة في معظم الأطر مثل Spring. يتم تغليف معظم الاستثناءات المحددة من JDBC في DataAccessException، والاستثناء (DataAccessException) هو استثناء غير محدد. هذه هي الفائدة التي توفرها أفضل ممارسات Java. تقتصر الاستثناءات المحددة على وحدات محددة، مثل SQLException، والتي يتم وضعها في طبقة DAO، ويتم طرح استثناءات وقت التشغيل ذات المعنى الواضح إلى طبقة العميل.
7) تذكر أن الاستثناءات مكلفة للأداء
شيء واحد يجب أن تتذكره هو أن الاستثناءات باهظة الثمن وتجعل التعليمات البرمجية الخاصة بك بطيئة. إذا كان لديك طريقة تقرأ من ResultSet، فغالبًا ما ستطرح SQLException دون الانتقال إلى العنصر التالي، والذي سيتم تنفيذه بشكل أبطأ بكثير من التعليمات البرمجية العادية التي لا تطرح استثناءً. لذلك، يتم تقليل التقاط الاستثناءات غير الضرورية وحركتها، حيث لا يوجد سبب ثابت. بدلاً من مجرد طرح الاستثناءات والتقاطها، قد تحصل على حل أكثر وضوحًا وأداءً إذا كان بإمكانك استخدام المتغيرات المنطقية لتمثيل نتائج التنفيذ. قم بتصحيح مصدر الخطأ وتجنب التقاط الاستثناءات غير الضرورية.
8) تجنب أن تكون كتلة الالتقاط فارغة
لا يوجد شيء أسوأ من كتلة الالتقاط الفارغة، لأنها لا تخفي الأخطاء والاستثناءات فحسب، بل يمكنها أيضًا ترك الكائنات الخاصة بك في حالة غير قابلة للاستخدام أو قذرة. يمكن أن تصبح كتلة الالتقاط الفارغة بلا معنى إلا إذا كنت متأكدًا تمامًا من أن الاستثناء لن يستمر في التأثير على حالة الكائن بأي شكل من الأشكال، ولكن تسجيل الأخطاء أثناء تنفيذ البرنامج لا يزال هو الخيار الأفضل. هذه ليست مجرد أفضل ممارسات Java، ولكنها الممارسة الأكثر شيوعًا لكتابة تعليمات برمجية لمعالجة الاستثناءات في برمجة Java.
9) استخدم الاستثناءات القياسية
توصي أفضل ممارساتنا التاسعة باستخدام استثناءات Java القياسية والمضمنة. يعد استخدام الاستثناءات القياسية بدلاً من إنشاء الاستثناءات الخاصة بنا في كل مرة هو الخيار الأفضل لقابلية الصيانة والاتساق، الآن وفي المستقبل. إعادة استخدام الاستثناءات القياسية تجعل التعليمات البرمجية أكثر قابلية للقراءة لأن معظم مطوري Java على دراية بالاستثناءات القياسية مثل RuntimeException أو IllegalStateException أو IllegalArgumentException أو NullPointerException التي تنشأ من JDK، ويمكنهم معرفة كل استثناء في لمحة. الاستثناءات المحددة في التعليمات البرمجية أو في الوثائق.
10) سجل الاستثناءات التي تم طرحها بأي طريقة
توفر Java الكلمات الرئيسية للرمي والرمي لطرح الاستثناءات. استخدم @throw في javadoc لتسجيل أي استثناءات قد يتم طرحها بأي طريقة. يصبح هذا مهمًا جدًا إذا كتبت واجهات برمجة التطبيقات (APIs) أو الواجهات العامة. يجب توثيق أي استثناء يتم طرحه بواسطة إحدى الطرق حتى تتمكن من تنبيه أي شخص يستخدمها دون وعي. هذه كلها أفضل الممارسات التي يجب اتباعها عند التعامل مع الاستثناءات في برمجة Java. أخبرنا ما هي الممارسات التي يجب اتباعها أثناء كتابة تعليمات برمجية لمعالجة الاستثناءات في برمجة Java.