何时要用 Raise触发异常,用showmessage命令代替有何不同?(50分)

  • 主题发起人 伊天仇
  • 开始时间

伊天仇

Unregistered / Unconfirmed
GUEST, unregistred user!
请大侠们详谈! 谢了!
 
Raise出来可以由异常处理程序截获,同时能够立刻退出当前function(Try语句除外)
ShowMessage仅仅是提示,没有任何其他功能。
 
Raise可以对错误作更精细的处理,而不至于将程序结构弄得杂乱无章。我知道你的意思
大概是为什么不直接用If ... Then ShowMessage,而用Raise来返回信息。
 
一般做控件的时候用Raise,程序里面用ShowMessage。
 
rasie是让delphi的异常处理机制帮你处理这个异常,而showmessage只是你自己为这个异常
写点注释显示出来而已,两者一般可以结合起来用,一方面你拦截异常用showmessage明确指出错误
原因和地点,用raise重新引发异常来让delphi的异常处理模块帮你善后(比如该存的存,该
destroy的destroy)
 
我在程序中用一样觉得很爽。由于程序不是由一个模块组成,所以在写模块的时候 所以的错误
不管是我预料到的还是没有预料到的,统统用异常抛出。而不用错误的处理,而在模块的调用
是不论系统的还是自己抛出的异常 按照规律 干怎么办就怎么把 一个也跑不了~~
:)
其实具体写的时候要灵活处理~ 用抛出异常和截获异常的想法去写程序。程序就会很健壮。
而且不会出现由于一个错误而引发一连出的showmessage消息的弹出
 
楼上各位,谢了! 我本人认为使用Raise是想把可能出现的例外交给别人或系统去捕获处
理, 而用showmessage只是我们在程序捕获到某个例外时想要给出的处理!
 
捕获到某个例外的时候 有很多处理方式
比如 记入日志中,调用错误报告程序,或者显示是错误信息
而用ShowMessage直接把错误信息显示给用户是很不用好的
调试的时候用用还可以
 
异常(Exception)有一个重要特性是:在调用堆栈中,它会不停向上传递,
直到遇到try...catch...为止(如果一直都没有用户定义的try...catch...,
异常就会由系统处理)。这个特性在代码重用中的作用是IF...THEN SHOWMESSAGE
无可比拟的。因为你在写一段可重用的代码时 - 假使是一个对象 - 你并不知道
这段代码将来会被谁调用。因此你在代码中发现错误时Raise一个异常,这个异常就
可以传递到调用者,由调用者根据自身情况进行处理。
 
kidneyball你说得对! 我现在正在写几个类,其中的方法要对某些硬件进行操作,如果用户
调用时传进来的参数不在规定的指令范围内,我便raise一个例外告诉用户出什么错误!我的
程序很多时候是在无人看守24小时运行的。这样就要求不能有提示框的出现而使程序中止,
如果用户没捕获例外进行如写日志等处理,势必会造成程序中止! 因此我想放弃在类的方法
中使用raise, 而是对超出范围的指令不处理,直接返回操作不成功!
各位大侠认为这样有何利弊呢?
 
WIN API 很多方法对对错误的处理 都是给返回值的 而不是跑出异常

还有 COM的处理返回也是一个返回值
 
我觉得,选择用返回值或异常的标准不是这个模块要做什么,也不是会不会引起程序中止
(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结构为止。
这就是返回错误值和抛异常对程序结构的影响的最大区别。
但是使用异常比用返回值系统开销要大,耗时要多。因此如果做底层编程,个人认为还
是用返回值好。因为其他程序员如果觉得需要用异常,可以在调用你的底层函数的上一
层过程里就引发异常。也可以选择继续向上传递,这样灵活性就大了。 还是那句,
异常的作用应该放在一个多层调用的系统里面来看。
 
AIHUA简单扼要,而kidneyball说得具体透彻,都使我受益不浅! 特别是:
1.这就是返回错误值和抛异常对程序结构的影响的最大区别。
2.因此如果做底层编程,个人认为还是用返回值好。这样灵活性就大了!
3.异常的作用应该放在一个多层调用的系统里面来看。
这三点很中肯。我已把它理解变成我的观点并把它存入我的资料库中!
能否请你谈谈对“聚集性”和“耦合性”的理解?
 
不好意思,应该是“高内聚”和“低耦合”的问题? 谢了!
 
<vb编程规范>中有一段很好的叙述

该书属于微软核心技术丛书 白皮 挺薄的
 
《代码大全》第六章 模块化设计 对这个问题解释得很详细了。你可以去看看。
《代码大全》在很多编程书籍网站都可以下载。
而且我觉得这本书是程序员必读的
 
OK! 等我看后才回来讨论!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
747
SUNSTONE的Delphi笔记
S
S
回复
0
查看
696
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
968
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部