我觉得,选择用返回值或异常的标准不是这个模块要做什么,也不是会不会引起程序中止
(catch了就不会终止了)。而是调用这个模块的模块的要求。举个例子,fileopen()函数
是用返回值表示出错的。因此使用fileopen的模式是:
f = fileopen(...)
if f>0 then
begin
文件处理
end
else
begin
出错
end;
如果段程序是写在一个button的onclick里,那一点问题都没有。问题是,如果这段程序
是一个过程A的一部分,而过程A被过程B 调用,过程B才在onclick里面被调用。这时如果
用返回值,就必须在A的“出错”部分“return 错误”,然后在B调用A时继续:
if A()>0 then
处理
else
终止B并向上层传递错误码
end;
直到最顶一层为止。但如果使用raise exception,就没有这个问题了,只要在B中不
catch函数A的异常,则B也会自动终止,exception会继续上传直到遇到try结构为止。
这就是返回错误值和抛异常对程序结构的影响的最大区别。
但是使用异常比用返回值系统开销要大,耗时要多。因此如果做底层编程,个人认为还
是用返回值好。因为其他程序员如果觉得需要用异常,可以在调用你的底层函数的上一
层过程里就引发异常。也可以选择继续向上传递,这样灵活性就大了。 还是那句,
异常的作用应该放在一个多层调用的系统里面来看。