try & catch

محمد الحربي • منذ 4 سنوات

السلام عليكم 

كل عام وانتم بخير بمناسبة شهر رمضان المبارك والله يجعلنا من صوامه وقوامه .. 

 

اشاهد الكثير من البرنامج تحتوي على try & catch في العديد من اللغات كـ (c++,java .. ) ولا اعرف ماذا تعني وفي ماذا تستخدم !

شُاهدت الكثير من الفيدوهات لتوضيح ذلك الامر , ولكن لم افهم كثيرًا 

أن تكرمتم اريد شرحًا لهذه الدوال  اتمنى ان يكون الشرح في لغة c++ لخبرتي فيها 

 

كلمات دليلية: c++ catch try

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (2)

Hussain Aljabri • منذ 4 سنوات

هلا والله, عليكم السلام, 

بحاول اوصفللك بال c++ ما يهم ان شاء الله توصل المعلومة.

اولاً: الكود.

#include <iostream> 
using namespace std; 
  
int main() 
{ 
   int x = -1; 
  
   // Code 
   cout << "قبل try \n"; // Point A
   try { 
      cout << "داخل try \n"; // Point B
      if (x < 0) 
      { 
         throw x; 
         cout << "بعد throw (لن يتم طبعها) \n"; // Point C
      } 
   } 
   catch (int x ) { 
      cout << "تم العثور على خطاً\استثناء \n";  // Point D
   } 
  
   cout << "بعد العثور catch \n";  // Point E
   return 0; 
} 
Output:
قبل try // Point A
داخل try  // Point B
تم العثور على خطأ\استثناء   //Point D
بعد العثور catch     // Point E

ثانياً: الشرح

 

try: يمثل بلوك من الكود يمكن من خلاله استخدام امر throw حتى ترسل خطاً نظامي او تتحكم من خلاله خطاً متوقع ان يحصل سواءً خطاً نظامي او هاردوير.

catch: يمثل بلوك من الكود يتم قرائته عند ارسال\حصول خطاً معين يتم تحديده في الparameter لـلـcatch مثال:

    try  { 
       throw 10; 
    } 
    catch (int x)  { 
        cout << x << " تم العثور" << endl; 
    } 
Output: 10 تم العثور

 توافق نوع المرسل في throw مع المطلوب في catch وهو نوع int.

اما المثال التالي الـthrow مرسل char والـcatch متوقع int. فراح يسير خطأ من نفس النظام بإن مافي بلوك يتحكم في خطأ ويكون parameter نوعه char.

    try  { 
       throw 'a'; 
    } 
    catch (int x)  { 
        cout << "تم العثور"; 
    } 
Output: Error: terminate called after throwing an instance of 'char'

يمكن تجنب النوع. واستقبال جميع الاخطاء في بلوك catch واحد. بذي الطريقه: اضف ثلاث نقاط مثل منت شايف تحت لوضع تحكم لجميع الاخطاء يكون بلوك افتراضي.

try  { 
       throw 'a'; 
    } 
    catch (int x)  { 
        cout << x << " تم العثور على" ; 
    } 
    catch (...)  { 
        cout << "الكود الإفتراضي\n"; 
    } 

throw: يستخدم لإرسال خطأ فالنظام. فقط.

 

والله يا حربي ودي اشرح لك اكثر, لكن اتمنى اني وصلت لك المعلومة الي تبيها.
اخوك, حسين الجابري.

instagram & twitter: @aljabritech

م. خديجة باحويرث • منذ 4 سنوات

السلام عليكم

كتبت شرح عنها قبل فترة طويلة و مازال مفيد حتى الأن.

 

https://omjana1.wordpress.com/2011/02/11/%D8%A7%D9%84%D8%B3%D9%8A%D8%B7%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-exception-handling/#more-199

 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !