了解和迎合用户的期望是设计优秀函数的关键

ZDNet软件频道 时间:2003-05-15 作者:周靖 译 |  我要评论()
本文关键词:
优秀的函数通常只做一件事情,但是能做得非常好。相反,一个糟糕的函数很快就会被人遗忘。本文将探讨一个名为dtDF的虚构函数,探讨一个优秀函数所具备的特点。
本文译自Builder.com,未经许可请勿转载优秀的函数通常只做一件事情,但是能做得非常好。一旦学会使用一个优秀的函数,任何时候都可立即使用它,根本不必思索它的用法或者它具体是如何工作的——整个过程如同呼吸一般自然。相反,一个糟糕的函数很快就会被人遗忘。

如果函数难以理解或使用,你的用户就可能另起炉灶,而不是使用你所提供的。本文将探讨一个名为dtDF的虚构函数,探讨一个优秀函数所具备的特点。


函数还是方法?
为便于理解,本文使用“函数”一词来同时指代函数和方法。本文讨论的基本思想对这两者来说都适用。



取一个好名字并设计得灵活一点

dtDF函数的作用是计算两个日期之间相差的天数。为了改进dtDF,要做的第一件事情就是为它换一个更好的名字。dtDF一点也不直观,没有人能记住。让我们将名称变长一些,把它叫做differenceInDays。现在,看看名字就知道该函数的作用,这可是一个不小的改进。

还有什么能使一个函数更优秀?那就是“宽大为怀”:应该能用不同的数据类型来调用它,而且它总能给出你所希望的结果。为了u增强易用性,可重载一个函数,使其接受不同的参数类型。所以在创建函数时,要设想到任何有必要重载的情况,提供它的多个重载版本。

那么,怎样重载differenceInDays来扩展它的应用范围,而且让它用起来更直观呢?它目前能接受两个date,所以我重载它来接受两个datetime对象。这样一来,函数的用户就不必进行多余的转换,也避免让他们记住differenceInDays到底是接受date还是datetime参数。

了解用户的期望并迎合他们

重载当然是件好事情,但这同时带来了一个容易被人忽视的问题:以下调用应该返回什么?
 
differenceInDays(‘01/01/2003 23:59’,’01/02/2003 00:01’)
 
有人说应该返回1,因为两个datetime落在不同的日期;有人说应该返回0,因为这两个时间的差异太小,根本不足一天。在这种情况下,你应该调查对于differenceInDays的用户来说,哪一种方案是最适合他们?他们期望发生什么?

如果接受一个date,而不是两个date,又会发生什么?differenceInDays怎样处理单个date对象?答案可能是将那个日期从今天的日期中减去,或者是直接返回0天。这个函数应该接受单个日期吗?同样地,你需要调查用户的期望。

要想知道用户的期望,一个办法是研究通用软件的做法。你的用户或许希望函数的行为和在其他类似的情况中一致。采用和前面相同的参数,Microsoft Excel的DATEDIF函数会返回1,因为它会忽略datetime参数中的time部分。另一方面,同样使用上述参数,Oracle SQL会返回一天的一部分。所以,这两种可能性都有先例可循。

要决定哪一种才是最佳方案,需要了解最终是谁来使用这个函数,他们怎样使用,以及是否存在任何特殊的规则。例如,你的公司可能制定了相关的商业规则,要求采用Excel的方式,而不是Oracle的方式。

如果你处在一个完全陌生的领域,要想知道用户的期望,一个办法是询问函数的几名潜在的用户,了解他们的选择及期望。如果获得的是一致的答案,就让函数去满足他们的需要。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134