DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

در این بلاگ مطالب درخور توجه از دنیای برنامه نویسی پیشرفته و به طور اختصاصی تر مباحث مربوط به زبان شی گرا و سطح بالای دلفی قرار میگیرد.

مدیریت استثناها یا Exception Handling

يكشنبه, ۲۱ خرداد ۱۳۹۶، ۱۰:۳۵ ب.ظ

Exception Handling

1- Exception ها رو نخورید!

کد زیر رو در نظر بگیرید :

try
SomeRoutineThatSometimesCausesAHardToFindAccessViolation

except

end;

در این قطعه کد هر نوع استثنایی رو به دام انداخته ایم اما هیچ اقدامی برای آن نشده است نه پیغامی نه کار خاصی ... در واقع با این کار ، کاربر ممکن است هیچ خطایی رو نبینه و برنامه هم به درستی کار نکنخ و Silent بمونه...

  

۲- Exception رو به دام نیاندازید و متن پیغامش رو خودتون دوباره Message نکنید زیرا به هر صورت نمایش داده خواهد شد!

کد زیر را در رابطه با این مطلب در نظر بگیرید:

try
 SomeCodeThatMightCauseAProblem
except
on
E: Exception do 
 begin
  MessageDlg(E.Message, mtWarning, [mbOK], 0);
 end;
end;

۳- خودتون به صورت ساختگی Exception ایجاد نکنید! به طور مثال ممکن هست کاری شبیه به کد زیر انجام داده باشید که صحیح نیست :

function StringIsInteger(aStr: string): Boolean;
var
Temp: integer;
begin
 Result := True;
 try
  Temp := StrToInt(aStr);
 except
  Result := False;
 end;
end;

4- یک نکته ی دیگر هم در استفاده از بلوک try ... except ... end هست که گاهی اوقات قابل استفاده ست.
شما میتونید پیغام های خطا رو  از داخل فانکشن و یا پروسیجر فرزند به پدر پاس بدید و پدر بر اساس اون تصمیم بگیره کار خاصی رو انجام بده و یا همون پیام رو مستقیم نمایش بده...
به کد زیر توجه که کنید در فانکشن فرزند یک متغیر لیبل تعریف شده ولی Create نشده و مقداری به Caption اون اختصاص داده شده ، در نتیجه Exception ایجاد میشه و میاد بیرون اما نکته اینجاست که اگر پدری باشه که مسیج رو دریافت کنه فانکشن فرزند میتونه Raise کنه و میشه در سمت پدر تصمیم گیری برای حرکت بعدی رو انجام داد،
به کد نگاهی بیاندازید : 

function TForm1.child: string;
var lbl:TLabel;
begin

try
 lbl.Caption:= 'aaaaaa';
except
 raise Exception.Create('MY Error Message');
end;

end;

//=================================

procedure TForm1.btn1Click(Sender: TObject);
begin

try
 child;
except on E:exception do
 ShowMessage(E.Message);
end;

end;

موافقین ۰ مخالفین ۰ ۹۶/۰۳/۲۱
علی دهبان

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی