PDA

View Full Version : سوال: توضیح مکانیزم try -- catch



javady_joon
جمعه 28 شهریور 1393, 15:22 عصر
سلام اگر میشه ساحتار try --- catch رو منظورم از نظر مکانیزم کارکرد توضیخ بدین
میخوام بدونم چطور کار میکنه و چرا بجای if از این ساختار بریا خطا استفاده میکنیم کلا چیز زیادی در موردش نمیدونم

group45
جمعه 28 شهریور 1393, 16:33 عصر
با سلام
قرار نیست بجای if از این ساختار استفاده بشه.
شما اول یکسری کد رو داخل قسمت try مینویسید و اگر در ایت قسمت برنامه به مشکل زمان اجرا خورد مثل تقسیم بر صفر
اتومات برنامه به قسمت catch میره و قطعا شما تو این قسمت کدی رو خواهی نوشت که اگه برنامه به مشکل خورد این کد ها اجرا بشه
حتی میشه تو این قسمت متن و نوع مشکل رو گرفت و به کار بر نشون داد
اگه باز متوجه نشدید من و دوستان براتون یه مثالی بزنیم

alireza_g698
جمعه 28 شهریور 1393, 18:28 عصر
سلام اگر میشه ساحتار try --- catch رو منظورم از نظر مکانیزم کارکرد توضیخ بدین
میخوام بدونم چطور کار میکنه و چرا بجای if از این ساختار بریا خطا استفاده میکنیم کلا چیز زیادی در موردش نمیدونم

با سلام
از try catch برای جلوگیری از runTime Error استفاده میشه و به if هم ربطی نداره.
برای مثال وقتی میخواهید به بانک اطلاعاتی موردی را اضافه کنید از این ساختار استفاده میکنید که به ارور برخورد نکنید
با تشکر

mohammad5530
جمعه 28 شهریور 1393, 18:33 عصر
if نمیتونه همه ی اتفاقات احتمالی رو بررسی کنه . زمانی که شما از try catch استفاده میکنی برنامه شما هیچ وقت ارور نخواهد داد و هنگ نمیکنه

javady_joon
یک شنبه 30 شهریور 1393, 13:27 عصر
راستش زیاد متوجه نشدم
باید خطا رو براش تعریف کرد؟
مثلا اگر فیلد خالی بود و دکمه ذخیره فشرده شد بجای هنگ کردن مثلا پیغام نشون بده و از try استفاده کنیم
خوب آخه چرا با if کنترلش نکنیم؟
آها یه چیزی
ما موقعی از if استفاده میکنیم که تمام خطا ها رو میدونم
ولی موقعی که نمیدونیم ممکنه در هنگام اجرا چه خطایی اتفاق میافته از Try استفاده میکنیم درسته؟

group45
یک شنبه 30 شهریور 1393, 15:37 عصر
باید خطا رو براش تعریف کرد؟

خیر مگه میشه خطا رو تعرف کرد. با این متد میشه خطای احتمالی زمان اجرای برنامه رو مدیریت کرد


خوب آخه چرا با if کنترلش نکنیم؟

همه چیز رو که نمیشه با if کنترل کرد. شاید شروط شما تو در تو بشه.


موقعی که نمیدونیم ممکنه در هنگام اجرا چه خطایی اتفاق میافته از Try استفاده میکنیم درسته؟

بله. مثلا کاربر بجای وارد کردن عددی یه حرفی رو وارد کنه. حالا چطور میخوای با if مدیریتش کنی؟

Davidd
یک شنبه 30 شهریور 1393, 15:52 عصر
در تكميل پاسخ هاي دوستان، جلوي بعضي خطاهارو ميشه با چك كردن گرفت مثلا خطاي تقسيم بر صفر يا قبل از تبديل يك رشته به عدد ميشه چك كرد و پيام مناسب به كاربر نشون داد. اما بعضي جاها با if نميشه. به عنوان مثال اگه يك متد فراخواني كني كه خودش ننوشتي و به كدش دسترسي نداري آيا با if ميشه فهميد كه اين متد بدون خطا اجرا ميشه يا نه؟
اگه تعداد حالات زياد باشه تعداد if ها هم زياد ميشه و ممكنه بعضي از حالات از قلم بيفته.

sadegh.javan
یک شنبه 30 شهریور 1393, 18:24 عصر
باید یک اشتباه رو اصلاح کنم :
به هیچ صورتی if نمیتونه کار بلاک try-catch رو انجام بده !

ببینید وقتی در هر نقطه ای از کد استثنایی رخ بده این استثنا مثل break عمل میکنه و بقیه کد دیگه اجرا نمیشه .
حالا این کد میتونه حتی if باشه!
شی استثنا طبق سلسه مراتب وراثت بالا میره و ما باید یه جایی اون رو بگیریم و کنترل کنیم .
اگه این کار رو نکنیم با اولین استثنا برنامه از کار میفته .
وظیفه گرفتن ! و کنترل استثنا به عهده بلاک try-catch هست . حتی اگر تو قسمت catch هیچ کدی ننویسیم این کار رو انجام میده و برنامه از کار نمیفته ، فقط ما از بروز خطا مطلع نمیشیم .

mrprestige
یک شنبه 30 شهریور 1393, 18:29 عصر
با سلام ، در واقع این ساختار مربوط به مدیریت خطا در برنامه هست که شکل کلی اون بصورت Try --Catch-- Finally هست یعنی به این صورت



try
{
....
}
catch
{
...
}
Finally
{
...
}

این خط کد زمانی استفاده داره به عنوان مثال شما برنامه توی کنترل تایمر نوشتید که در یک بازه زمانی برنامه n بار تکرار شه وقتی حالا ممکنه برنامه شما n+1 بار تکرار شه که اینجا برنامه با خطا روبه رو می شه . برای جلوگیری از خطا از چنین ساختاری استفاده میکنیم یعنی برنامه اصلی رو در قسمت try می نویسیم و کد های Catch نیز زمانی اجرا میشود که برنامه ی ما با خطا مواجه شده مثلا تو این قسمت میتونی یه مسیج باکس تعریف کنی که برنامه با خطا مواجه شده . و در آخر نیز کدهای مربوط به قسمت Finally هم در هر دوصورت اجرا میشود یعنی برنامه چه خطا داشته باشه چه نداشته باشه کدهایی که تو این قسمت نوشتی اجرا میشن به این صورت میتونی روی خطا های برنامت مدیریت داشته باشی و اینکه همه جاهم کاربرد نداره یعنی اینکه ممکنه برنامه ای نوشته باشی که نیاز داشته باشی خطای برنامت رو بدونی و این ساختار در اونجا کاربردی نیست . امیدوارم تونسته باشم راهنماییتون کرده باشم . موفق باشید .