命名约定 - isEnabled vs isVisible

时间:2012-11-20 10:01:13

标签: coding-style boolean naming-conventions

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

您希望拥有:

control.isEnable = true

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

4 个答案:

答案 0 :(得分:1)

双重底片在简单的英语和计算机代码中都很糟糕。

你不同意吗?

答案 1 :(得分:1)

标识符应该使用调用者更容易感兴趣的意义。在某些情况下,这可能意味着对于可能乍一看似乎是多余的事物而言具有多个属性。例如,界面可能同时提供IsWritableIsImmutable属性。尽管可写的东西不可能是不可变的,反之亦然,但是对象既不可写也不可变(例如,它可能是一个可以被其他东西改变的数据的实时只读视图)。想要写入对象的代码应该测试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