12.3.6 利用異常響應編程
利用異常處理機制不僅能使程序更加健壯,而且也提供了一種使程序更加簡捷、明了的途徑。事實上,使用自定義異常類就是一種利用異常響應編程的方式。這裡我們再討論幾個利用標准異常類編程的例子。
比如為了防止零作除數,可以在進行除法運算前使用if…then…else語句。但如果有一系列這樣的語句則繁瑣程度是令人難以忍受的。這時候我們可能傾向於使用EDivByZero異常。例如如下一段程序就遠比用if…then…else實現簡捷明了。
function Calcu(x,y,z,a,b,c:Integer):Real;
begin
try
Result := x/a+y/b+z/c ;
except
on EDivByZero do
Result := 0;
end;
end;
在(6.2.3)記錄文件的打開與創建中就是利用異常響應來實現文件的打開或創建。
procedure TRecFileForm.OpenButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
FileName := OpenDialog1.FileName
else
exit;
AssignFile(MethodFile,Filename);
try
Reset(MethodFile);
FileOpened := True;
except
on EInOutError do
begin
try
if FileExists(FileName) = False then
begin
ReWrite(MethodFile);
FileOpened := True;
end
else
begin
FileOpened := False;
MessageDlg('文件不能打開',mtWarning,[mbOK],0);
end;
except
on EInOutError do
begin
FileOpened := False;
MessageDlg('文件不能創建',mtWarning,[mbOK],0);
end;
end;
end;
end;
if FileOpened = False then exit;
Count := FileSize(MethodFile);
if Count > 0 then
ChangeGrid;
RecFileForm.Caption := FormCaption+' -- '+FileName;
NewButton.Enabled := False;
OpenButton.Enabled := False;
CloseButton.Enabled := True;
end;
總之,利用異常響應編程的中心思想是雖然存在預防異常發生的確定方法,但卻對異常的產生並不進行事前預防,而是進行事後處理,並以此來簡化程序的邏輯結構。