假设您正在使用 API,并且您需要设置一个值来启用或禁用组件。
您希望拥有:
control.isEnable = true
或者
control.isDisable = false
Imo,第一个似乎更“直观”,但你知道为什么吗?
假设您正在使用 API,并且您需要设置一个值来启用或禁用组件。
您希望拥有:
control.isEnable = true
或者
control.isDisable = false
Imo,第一个似乎更“直观”,但你知道为什么吗?
双重否定在简单的英语和计算机代码中都是不好的。
你不反对?
标识符应该使用调用者更容易感兴趣的含义。在某些情况下,这可能意味着对乍一看似乎多余的事物具有多个属性。例如,一个接口可能同时提供IsWritable
和IsImmutable
属性。尽管可写的东西不可能是不可变的,反之亦然,但一个对象可能既不是可写的也不是不可变的(例如,它可能是一个可以被其他东西更改的实时只读数据视图)。想要写入对象的代码应该测试IsWritable
;想知道一个对象是否应该被防御性复制的代码应该测试IsImmutable
。
请注意,.net 中的某些类违反了这一原则。例如,根据这个原则,WeakReference
应该调用测试 a 有效性的属性IsDead
,因为如果 aWeakReference
死了就会采取行动的代码可能对如果它还活着的引用不感兴趣,但是如果引用就会采取行动的代码is alive 应该几乎总是捕获Target
并测试是否它是null
,而不是测试是否WeakReference
是活着的。
两者都不。构成问题的名称,例如isFoo
暗示访问者。
if (control.isEnabled())
对于字段的名称,我更喜欢形容词。
control.enabled = true
即使您更喜欢问题形式,它也应该使用过去分词形式,即isEnabled
. 英语中没有任何东西被描述为“启用”。
至于正面/负面,我 99% 的时间都同意 NimChimpsky。我正在构建的应用程序现在有一个其他 1% 的示例,其中预期状态是“好的”,我需要一个形容词来描述负面情况——在这种情况下rejected
。
尽管我同意使用“调用者更容易感兴趣”的意思,但另一种选择是考虑使用默认的初始大小写False
,这样它在创建时就已经有效并且不需要初始化为True
.