PDA

View Full Version : سوال درباره try و finaly



bmanfy
شنبه 23 دی 1385, 18:00 عصر
سلام دوستان
من این دو رو تویه برنامه ها میبینم اما هیچ وقت نفهمیدم که کارشون چیه
ممنون میشم یه توضیح بدین

www2006
شنبه 23 دی 1385, 19:19 عصر
فرض کنید میخواهید یک سری دستورات را حتما اجرا کنید و وقوع احتمالی Exception ها (خطاهایی که در برنامه ممکن است رخ دهد ) مانع از اجرای آنها نشود (= اطمینان از اجرای بعضی از دستورات ).. برای این منظور از :




try
... // process file F
finally
CloseFile(F);
end;
استفاده میشود ...
البته تو Help خود دلفی خیلی قشنگتر و کاملتر توضیح داده شده ...

iman_s52
شنبه 23 دی 1385, 19:54 عصر
تو دلفی فکر کنم اجازه نده که try , except , finnaly رو با هم استفاده کرد ؟؟
درسته؟

www2006
شنبه 23 دی 1385, 20:22 عصر
تو دلفی فکر کنم اجازه نده که try , except , finnaly رو با هم استفاده کرد ؟؟
درسته؟

درسته ،نمیشه با هم استفاده کرد.... ولی تودرتو میشه استفاده کرد

حرفه ای
یک شنبه 24 دی 1385, 09:53 صبح
درسته ،نمیشه با هم استفاده کرد.... ولی تودرتو میشه استفاده کرد



try
try

except

end;
finally

end;

m-khorsandi
یک شنبه 24 دی 1385, 11:11 صبح
سوال درباره try و finaly

وقتی که بخشی از کدت ، resource یی رو در اختیار میگیره، اغلب لازمه که از آزاد شدن اون
resource مطمئن بشی، بدون توجه به اینکه اون بخش از کد، طبیعی خاتمه پیدا کنه یا با خطا.
به همین دلیل میتونی از try..finally استفاده کنی. در واقع try..finally ،نوعی بلوک محافظ حافظه ست.

Saeid59_m
دوشنبه 25 دی 1385, 09:01 صبح
خوب حالا اگه اروری توی این بلوک بوجود بیاد چطوری متوجه بشیم

shobair
دوشنبه 25 دی 1385, 14:00 عصر
خوب حالا اگه اروری توی این بلوک بوجود بیاد چطوری متوجه بشیم

سلام
اگر در بلوک Try خطا رخ بده به اجرا به بلوک Except منتقل میشه
و اگر خطا رخ نده هیچ وقت Except اجرا نمیشه

شبیر

Saeid59_m
سه شنبه 26 دی 1385, 07:43 صبح
سلام
اگر در بلوک Try خطا رخ بده به اجرا به بلوک Except منتقل میشه
و اگر خطا رخ نده هیچ وقت Except اجرا نمیشه

شبیر

می شه یه مثال بزنید

MNosouhi
سه شنبه 26 دی 1385, 09:03 صبح
می شه یه مثال بزنید
یه مثال ساده :
در کد زیر ابتدا متغیر s ایجاد می شود و عملیاتی صورت می گیرد ، اگر مثلا فضای کافی برای ایجاد s نباشد (یا هر نوع خطای دیگری) کنترل برنامه به قسمت except منتقل شده و پیغام error نمایش داده می شود .
اما چه خطایی رخ دهد و چه رخ ندهد به هر حال قسمت finally اجرا خواهد شد تا متغیر s آزاد شود و مدیریت حافظه به درستی انجام گیرد.


var s:tstrings;
begin
try
try
s:=TStringList.Create;
//...other code
except
ShowMessage('error');
end//
finally
s.Free;
end;
end;