DelphiGuru

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

DelphiGuru

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

DelphiGuru

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

۱ مطلب در خرداد ۱۳۹۶ ثبت شده است

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;

۱ نظر موافقین ۱ مخالفین ۰ ۲۱ خرداد ۹۶ ، ۲۲:۳۵
علی دهبان