استثنا - Exception (مقدمات)
در زبان های برنامه نویسی استثنا راهی برای مشخص کردن و نمایش خطاها یا شرایط غیرمنتظره در برنامه ها است. برای مثال عملگر "new" در صورت عدم امکان اختصاص حافظه درخواست شده، یک استثنا را باز می گرداند. یکی از مکانیزم های ساده برای کنترل برنامه استفاده از دستور if است. زبان C++ یک مکانیزم دیگر برای کنترل کد در اختیار شما قرار می دهد که به شما اجازه می دهد تا کد ها را قسمت کرده و عملکرد هر قسمت را مدیریت کنید. این نکته اهمیت دارد که بدانید استثنا ها به منظور جایگزین شدن با دیگر راه های کنترل و تایید اطلاعات ایجاد نشده اند. به طور کلی استثنا ها برای مواقعی که امکان دارد یک خطای جدی ایجاد شود استفاده می شوند.
مکانیزم استثنا از سه کلمه یا دستور کلیدی استفاده می کند :
try :
شناسایی یک بلوک کد که ممکن است در آن استثنا رخ دهد.
throw :
ایجاد و بازگرداندن یک استثنا.
catch :
شناسایی یک بلوک کد که در هنگام دریافت یک استثنا، اجرا می شود.
عملکرد این سه دستور را میتوان به راحتی در یک مثال ساده نمایش داد. برای مثال میخواهید مدت زمانی یک دستگاه یک قطعه را تولید میکند در هر ساعت بر حسب دقیقه بیان کنید. اگر تعداد قطعات در هر ساعت را با یک آرایه به نام Counts نشان دهیم میتوانیم تکه کد زیر را برای انجام این محاسبات به کار ببریم.
array < int > ^ Counts = {34, 54, 0, 27, 0, 10, 0};
double mins = 60;
for (int i=0; i < Counts - > Length; i++)
try
{
cout << "Hour " << i+1;
if (Counts[i] == 0)
{
throw " can not perform calculations";
}
cout << ", time per item :" << mins/Counts[i] << endl << endl;
}
catch (const char Msg[] )
{
cout << Msg << endl << endl;
}
همان طور که می بینید در این تکه برنامه برای جلوگیری از خطای "تقسیم بر صفر" از مکانیزم try-catch استفاده شده است. به این ترتیب که کدی که احتمال دارد در آن خطای تقسیم بر صفر زخ دهد در درون بلوک Try قرار داده شده است و در این بلوک از دستور if برای شناسایی ورودی صفر استفاده شده و سپس از دستور throw برای بازگزداندن یک استثنا استفاده شده است. استثناهای فرستاده شده به وسیله ی دستور throw ، به وسیله ی دستور catch گرفته شده و پس از آن کد های درون بلوک catch اجرا شده و متن موردنظر (پیام خطا) در خروجی چاب می شود. در صورت ورودی غیر صفر، عدد 60 بر تعداد ورودی تقسیم می شود تا مدت زمان تولید هر قطعه به دست آید. (در صورت اجرای دستور throw ، کد های پس از آن اجرا نخواهند شد و حلقه از دور بعد آغاز خواهد شد). با اجرای این برنامه خروجی زیر نمایش داده خواهد شد.

این یکی از ساده ترین مثال های استفاده از بلوک try-catch است و کارهای بسیار پیچیده و کاربردی تری را میتوان با این مکانیزم انجام داد. در پست های بعدی مثال های دیگری از مدیریت استثنا در زبان های برنامه نویسی را خواهیم دید.
منبع : Ivor Horton's Beginning Visual C++ 2010
+ نوشته شده در چهارشنبه بیست و هفتم اردیبهشت ۱۳۹۱ ساعت 20:59 توسط MEC
GENERAL INFORMATION