نلاحظ أن كلمة Error مفهومة لكن لماذا يسمونها Exception ( استثناء ). الكلمة هي اختصار exceptional event ( حدث استثنائي ). ربما لأن البرنامج كان لديه مسار معين في تنفيذ تعليمات الأكواد لكن حصل فجأة "حدث استثنائي" ادى الى تغيير ذلك المسار.
إذاً فـ try-catch صممت للاحداث التي الاستثنائية. فلو كان الحدث متوقع مثل خطأ القسمة على صفر فهو ليس استثنائي بل سيحدث دائماً كلما قسمنا عدد على صفر. لذا من الافضل ان نعالجه من خلال if-statement. اما اذا كان غير متوقع و استثنائي حقيقة و نادر فنستخدم عندها try-catch.
من يعرف لغة C يلاحظ ان الMain function ترجع قيمة نوعها int. هذه من ايام Unix البرنامج يعيد رقم خطأ معين فيقوم Unix بالبحث عنده على استجابة او معالج Handler لذلك الخطأ و اذا لم يجد يقوم بإغلاق البرنامج. فمصمم C اسند معالجة الاستثناءات لنظام التشغيل Unix الذي شارك ايضاً في تصميمه.
قبل C كانت لغة Lisp في الستينيات لديها اداة لمعالجة تلك الأخطاء او الاستثناءات و اخذت منها الكثير من اللغات تلك الفكرة. لكن C للأسف صممت بدون تلك الآلية و تم تداركها في ++C و التي منها انتشرت للغات مثل Java و سي شارب و بايثون و غيرها.
يعتبر الException handling من المزايا المهمة التي اضافها Stroustrup في ++C و لم يرى حازت التقدير الذي يستحقه كما قالها في مقابلة له.
ما يكروسوفت تداركت موضوع الException Handling في لغة C بأن صممت و اضافت مكتبة لتلك الخاصية كون لغة C مازالت حية و ستظل لوقت حية لوقت طويل.
لنأتي الان كيف قام Stroustrup باضافة الException Handling ل++C من خلال C. لا اعرف على وجه الدقة لكن يمكن تنفيذ آلية الException handling بواسطة مكتبة setjmp.h في C و التي بها دالتين:
setjump(jmp_buf buf)
longjump(jmp_buf buf, i)
setjump(jmp_buf buf)
longjump(jmp_buf buf, i)
اذا كنت مهتم بمعرفة كيف يمكن فعل ذلك و منها تفهم كيف تعمل try-catch ففي هذا الفيديو تم شرح كيفية تنفيذ الtry catch بلغة سي.
(انتهى)
youtu.be
(انتهى)
youtu.be
جاري تحميل الاقتراحات...