使用异常机制,还是使用返回值判断? (200分)

  • 主题发起人 主题发起人 Adnil
  • 开始时间 开始时间
A

Adnil

Unregistered / Unconfirmed
GUEST, unregistred user!
例如编写一个业务核心类供界面程序掉用。
业务核心类还可能被其他的类引用或者继承

type
TTest = class
procedure TestUseException
//函数使用异常机制,界面调用程序处理异常来判断执行情况
function TestUseResult: integer
//函数使用返回值,界面调用程序使用返回值判断执行情况
end;

procedure TTest.TestUseException
//函数使用异常机制
begin
somefunc...
end;

function TTest.TestUseResult: integer
//函数使用返回值
begin
Result := 0;
try
somefunc...
except
Result := 1;
end;
end;

大家说说看,到底用那一种方式比较好?

相关概念请见
http://www.delphibbs.com/delphibbs/dispq.asp?lid=620575
 
函数使用异常机制将更不容易出错!
 
第二种好(举若干只手)!
最好
begin
result:=0;
try
begin
try
yourfunc....
except
result:=1;
raise;
end;
end
finally
another one...
end;
 
实际上也就是说异常机制还是要用到的。

1.核心对象处理异常,分析功能,交给界面程序错误号和返回值
界面程序处理错误号,如果没有错误,则处理返回值
2.核心程序假设不会出现异常,只分析功能,只交给界面程序返回值
界面程序处理异常,如果没有异常,则处理返回值

1和2的差别其实就是异常处理到底放在何处比较合适。 在此听听大家的意见和经验。
 
我喜欢用返回值,不过是用异常可以简化程序结构
 
这可不是哪个好哪个不好的问题, 要根据你的需要来使用.

对某些错误, 你可能允许函数后返回一个缺省值, 有些错误不允许缺省值, 就需要raise
一个Exception.

不过一个程序的容错能力越强, 该程序运行起来就越流畅. 过多的Exception未经过处理
会破坏程序的连续性, 并且使用户感到你的程序有Bug.
 
在很多场合使用Exception好,比如在触发器中,在应用服务器中
 
異常機制不但用起來方便,寫起來也方便。
 
如果能够使用返回值,那最好,不过你的程序大了以后,可能出现n中情况,而且可能根据各种情况
给出各种不同的提示信息,这是使用异常的优点就体现出来了,随时能中止程序,能够返回不同的信息。
虽然函数返回值也可以那么实现,但是很麻烦。

同时,举一个数据库的例子,你的一段涉及数据库操作的程序写在一个函数里面。
然后在调用它的函数内部使用了Try Except+事务处理。
这是如果是使用返回值,你必须根据返回值来判断,在决定是否进行回滚,但是有异常,
可以直接使用Try..Except来决定。

个人认为两个各有自己的优点,就像Delphi自己的vcl,也通用两种方式,不过它好像异常用的比较多。
 
接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部