关于异常处理机制(100分)

  • 主题发起人 主题发起人 Shepherd
  • 开始时间 开始时间
S

Shepherd

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI的异常处理机制和用函数返回值的方式判断错误
到底有多大差别,谁好谁坏
 
异常处理机制好!
 
异常出现马上就会退出函数体
object pascal 与 c不一样,没有 return 马上退出函数体
如果利用返回值退出,必须用result:= ;exit;两条语句
利用异常raise exception.create('');立即退出函数体,不管是否有返回值
exit是一个特殊的异常,不产生异常消息
 
我一般采用的是函数返回值的方案,因为通常情况下,异常处理开销要大一些,并且不用
异常的代码看起来更加清晰,参考一下Windows API——它们绝大多数都是使用返回值的。
当然,也不能一概而论。如果涉及到资源的释放,我一般使用try...finally...end,还有一
些在使用异常之后程序更加高效的情况下(比如退出到多层调用的入口、返回特殊的异常信
息等等),我们是不必忌讳使用它的。

另:exit并不是异常,abort方法才是产生一个哑异常——我经常用它跳出多层递归——只要
在最外层开始调用时用 try...except...end 即可。
 
to creation-zy:
我现在就是用的函数返回的那种种方式,但这样的东西需要太多的判断,程序里到处都是条件语句了。
而且我看到好多书上都说,异常处理机制如何的好。说可以简化程序,更有条例。
但我却不明其议。
 
delphi的异常处理机制是写在编译器里面的

你说那个更好些?
 
异常处理会恢复现场,你的函数能恢复现场么?
 
写代码可读性为优先, 然后考虑效率.....如果多层判断返回值会把代码的可读性
搞坏, 那还是用异常吧, 如果你的所有代码都是用的返回值, 那也不必在一个地方
用异常...这时候一致性就很重要了...
 
觉得在编译器里调试的异常处理是编译器的
只有执行EXE文件才能正确判断结果
最好做完善的异常处理
 
常处理机制好
finally总能执行到
 
建议
TRY EXCEPT
RAISE
 
有时函数返回值是表示不了的。
 
我以前的代码都用的返回值 现在我开始大量使用异常处理了
确实可以节省很多代码 但我总觉的这样作丢掉了什么东西
经验不够 确实我觉得两种方法很难取舍
 
后退
顶部