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