2

假设您正在使用 API,并且您需要设置一个值来启用或禁用组件。

您希望拥有:

control.isEnable = true

或者

control.isDisable = false

Imo,第一个似乎更“直观”,但你知道为什么吗?

4

4 回答 4

6

双重否定在简单的英语和计算机代码中都是不好的。

你不反对?

于 2012-11-20T10:04:11.173 回答
1

标识符应该使用调用者更容易感兴趣的含义。在某些情况下,这可能意味着对乍一看似乎多余的事物具有多个属性。例如,一个接口可能同时提供IsWritableIsImmutable属性。尽管可写的东西不可能是不可变的,反之亦然,但一个对象可能既不是可写的也不是不可变的(例如,它可能是一个可以被其他东西更改的实时只读数据视图)。想要写入对象的代码应该测试IsWritable;想知道一个对象是否应该被防御性复制的代码应该测试IsImmutable

请注意,.net 中的某些类违反了这一原则。例如,根据这个原则,WeakReference应该调用测试 a 有效性的属性IsDead,因为如果 aWeakReference死了就会采取行动的代码可能对如果它还活着的引用不感兴趣,但是如果引用就会采取行动的代码is alive 应该几乎总是捕获Target并测试是否它是null,而不是测试是否WeakReference是活着的。

于 2012-11-20T18:17:31.967 回答
1

两者都不。构成问题的名称,例如isFoo暗示访问者。

if (control.isEnabled())

对于字段的名称,我更喜欢形容词。

control.enabled = true

即使您更喜欢问题形式,它也应该使用过去分词形式,即isEnabled. 英语中没有任何东西被描述为“启用”。

至于正面/负面,我 99% 的时间都同意 NimChimpsky。我正在构建的应用程序现在有一个其他 1% 的示例,其中预期状态是“好的”,我需要一个形容词来描述负面情况——在这种情况下rejected

于 2012-11-21T10:12:39.090 回答
0

尽管我同意使用“调用者更容易感兴趣”的意思,但另一种选择是考虑使用默认的初始大小写False,这样它在创建时就已经有效并且不需要初始化为True.

于 2012-11-21T10:25:39.623 回答