Span Zhang(张友邦)的专栏 (分形艺术,摄影,软件开发,生活休闲)

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘世如潮人如水,只叹江湖几人回。

原创 函数返回设计以及错误处理收藏

本文属spanzhang(张友邦)原创,发布地址为:http://blog.csdn.net/spanzhang。转载请注明原文出处,否则我就死给你看。

 今天在闲逛的时候发现一篇文章,zhuweisky写的《函数设计之美--函数需要返回错误码吗(一)?》(http://blog.csdn.net/zhuweisky/archive/2005/09/08/475355.aspx)。文章主要对函数返回错误码一事进行了讨论,作者最后给出的观点是采用契约式的前置约束而不是返回错误码来使得设计变得更加优雅。

我对这个问题也关心很久了,一直没来得及整理思路。应该说这是一个非常普遍的设计问题,很多人都在这个问题前犯过难。我觉得对于函数返回值的设计以及错误处理应该和团队习惯以及开发工具有很大关系,个人不推荐契约式的前置约束。我对契约式设计没有深入地研究过,但可以想象,运行时的契约检查如果不成立同样也会涉及到错误处理(有可能是抛出异常),所以荐契约式的前置约束实际上是换汤不换药。但我在zhuweisky的文章中看到的代码没有在函数前置约束的Meta Data中指定契约不满足时的处理办法,语言级的支持没办法在编译的时候提供任何运行时保证。

对于C++开发语言,我个人推荐采用返回值的方式来表达运行结果情况而用out参数(指针或引用)承载实际内容。对简单的情况,返回值可以是bool类型,但更多的时候推荐使用枚举(或int)。任何函数在执行之初对传入参数和运行环境的基本检查是必需的,这是一个非常好的习惯。之所以我这样认为,是因为C/C++的历史原因导致。而对于Java来说就更多的推荐使用异常机制来处理错误和约束。但函数约束检查都是必须的,它能在局部保证函数的正常运行。

zhuweisky在文中提到的一句话我非常赞同:不要让错误传播(出现),在错误出现的发源地(萌芽期)就解决它!错误越是传播到最后,关于处理它的上下文就丢失得越多,对于错误的蔓延就越是爱莫能助!这也正是约束检查的证据,同时结合分层的设计让错误呈现出层次结构,对每一层的错误处理都是必需的。

以上观点纯属个人见解,如有不同意见,欢迎来信:spanzhang@gmail.com

发表于 @ 2008年03月03日 10:08:00|举报收藏

新一篇: 两张作品入选Renderosity Fractal Window Weekly | 旧一篇: SQL Agent调度低于1分钟的循环作业

用户操作
[即时聊天] [发私信] [加为好友]
张友邦
订阅我的博客
XML聚合  FeedSky
张友邦的公告
张友邦,男,微软认证专家,系统分析员,中国计算机学会会员,希赛网专业顾问,新加坡南洋理工大学助理研究员。1980年生于四川宜宾,2002年获得国防科技大学宇航科学与工程系学士学位。2003年底创业,后曾在多家公司担任CTO职务,拥有丰富的企业级应用设计开发经验。主要研究领域包括软件架构与设计、WEB RIA、流媒体与计算机图形图像,云计算及SOA,Business Forecasting,优化算法等。受国家自然科学基金资助,2001年发表国家级核心刊物学术论文一篇。国内最顶级分形艺术创作软件FerryMan Fractal作者,2006年初创建原创分形艺术专业网站CGPAD.COM。
文章分类
收藏
    链接
    ●CGPAD分形艺术
    ●Renderosity
    ●中国系统分析员CSAI名片
    存档
    Csdn Blog version 3.1a
    Copyright © 张友邦