GSe*_*erg 3 language-agnostic return-value
你正在设计一种方法.它有一个目的,这就是你首先设计它的原因.调用者使用你的方法并且方法失败,但是,并且看,尽管如此,仍然实现了延长方法存在的最终目的 - 由于你无法控制的外部环境或某种魔法,你选择.您是否会将这种情况报告给调用者失败或成功?
让我们选择一个简单的例子.你正在写一个DeleteFile
函数.它需要一个文件路径并删除该文件.有人调用此函数,提供路径.该函数查找文件,但它不存在.这不是权限问题或其他什么,文件真的丢失了.也许另一个进程在一个微秒前删除了它,也许它根本就不存在.该函数无法执行其任务,因此它必须报告失败...但是用户调用此函数的唯一原因是确保文件不存在,并且,瞧,它没有,所以它是一个成功.
我期待回答"只是在你的回报价值中更加冗长",我很高兴回复一个详细的结果作为免费信息,但是你将返回什么(和为什么)作为功能,成功或者成功的主要成功标志失败?使用BUT_DOES_NOT_EXIST_ANYWAY的附加标志会是FALSE,还是BUT_THANK_SOMEONE_ELSE标志为TRUE?
我一般都在询问情况,包括方法没有参数或者由于其他原因无法以错误的方式调用它.
Mik*_*els 13
当新程序员学习如何编写函数时,通常会引入术语前置条件和后置条件.前提条件是您的方法正常工作必须满足的假设.后置条件是保证您的方法在执行后对系统的状态.
我认为调用deleteFile
方法时期望的合理前提是文件当前存在.如果不满足前提条件,即使后置条件是以偶然的迂回方式实现的,该方法也应该失败.
现在,如果你的方法被调用deleteFileIfExists
,这是一个不同的故事.你没有对这种方法施加如此严格的先决条件.
遵循最小惊喜的原则,并抛出异常.
我想到的方式是:如果我正在编写代码并在我的代码中包含一个错误路径传递给DeleteFile函数的错误,一个路径如此不正确以至于它永远不会存在,我希望DeleteFile会抛出,表明我做错了什么.
如果你想要,你可以创建一个接受一个名为ThrowOnFileNotExist或其他东西的参数的重载,如果设置为false,它就不会抛出这种情况.但我认为这将是罕见的异常情况.
归档时间: |
|
查看次数: |
220 次 |
最近记录: |