科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件“武士道”程序设计方法

“武士道”程序设计方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

坚持使用本文提到的设计方法似乎受到很大限制,但采用一些明智的指导,可以使你的代码更易于维护,更便于扩张,最终更易于理解。

作者:builder.com.cn 2007年2月7日

关键字: Nick Gibson 程序设计

  • 评论
  • 分享微博
  • 分享邮件

看过《罗生门》这部电影的人都熟悉武士道,日本的“武士精神”,一种行为准则,为人们,特别是战时武士生活的方方面面提供指导。武士道至死强调个人荣誉的重要性。日本战士——日本武士——应该战斗到生命的最后一刻,做到“不成功,则成仁”。

那么,这个古老的行为准则与软件设计有何关系呢?对程序员而言,武士道也是一种设计指南,主要在使用支持异常的语言时应用。简单来说,一种方法要么成功完成它的任务,返回一个合法结果;要么形成异常然后终止:或者成功返回,或者根本不返回。这样做的目的在于消除使用返回代码或无效对象来表明一个方法失败或遇到意外的旧有做法。

你可能会说,等等,我们这么多年一直在这么做呀!而且,总是使用异常不是会减慢程序的运行速度吗?如果我到处使用异常,可能会降低运行速度;但“武士道”编码方法肯定有补偿这种缺点的优势:

  • 安全——如果你虔诚地应用“武士道”编码方法,你可以保证,除异常处理代码块以外,你的程序处于安全状态。现在,获得这种安全保证并不仅限于使用这种方法。你也可以通过确保你检查任何可能失败的函数的返回值来达到同样的目的。但是,用异常代替返回值可以获得“免费”安全,至多只要处理一下异常而已。
  • 一致性——选择一致的错误代码相当困难,因为它们并不依赖发生错误的类型,而是依赖于函数或方法的返回类型。一个返回正整数的方法可以使用-1作为错误值;但如果这个方法返回一个列表,就不能用-1作为错误值。如果两个函数能够指出同样的错误,但返回类型不同,那么你必须以不同的方式识别这种错误,这可能会造成可维护性问题。
  • 明确性——避免错误代码或看守值,我们可以更加自然地引用一个函数的结果。在进行算术操作时,这种做法的效果特别明显。例如,如果用“武士道”编码方法编写下面的代码,则countItems() 函数提交错误异常,那么就可以更安全的使用下述代码:
    int cost = countItems(a) * itemCost(a);

    然而,如果countItems() 函数返回一个错误代码,如-1,那么就需要重新编写代码,像这样:

    int cost = countItems(a);

if (x != -1) {

x *= itemCost(a);

}

如你所想的那样,把支持异常作为避免错误的方式的语言常常使用这种编码方法。Python标准库允许使用“武士道”编码方法,基本上Java API也是这样。自然,大多数情况下,应用“武士道”编码方法总是会出现几个例外情况(没有双关意义)。

例如,在Python中,子字符串搜索函数str.find和常规表达式匹配函数re.match在失败时都返回一个错误代码。str.find要么返回子字符串第一次出现的目录,或者如果子字符串根本没有在那个字符串中出现,则返回- 1。同样,如果表达式不匹配,re.match返回None而非一个匹配对象。初看来,这似乎不太适当;但如果你考虑一下,这其实完全依赖于你如何定义一个函数任务,或契约。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章