现在命名以“是”不良做法开始的布尔人吗?我的经理认为“isAnything”已经过时且做法很差。这是真的吗?
myManager.isLame ? correct() : incorrect();
答案 0 :(得分:23)
在很多语言中经常使用它,但我不知道是否可以确定它是首选方法。
我认为一致性和特定团队中每个人使用相同的标准/风格是重要的事情。
答案 1 :(得分:18)
我不会在这里使用任何严格的规则。虽然我发现诸如'Is'之类的前缀在识别布尔属性时很有用,但在很多情况下'Is'不是最佳选择。
MSDN naming guidelines包括以下相关建议。
使用肯定短语命名布尔属性(而不是CanSeek CantSeek)。或者,您也可以使用前缀布尔属性 是,可以或有,但只有在它增加价值的地方。
答案 2 :(得分:3)
isLame()
很常见,我认为它不是蹩脚的。在Java中,它是JavaBeans规范的一部分,因此非常容易实现。
答案 3 :(得分:2)
这是一种风格问题,我已经多次看到它了(并且我自己用多种语言做到了这一点)。
答案 4 :(得分:1)
在风格上,我的投票将是针对hasValue或isNullOrEmpty。然而,使用聪明的快捷方式或单行if语句是非常糟糕的。它大大降低了代码的可读性,在大多数语言中都不会带来任何性能提升。
答案 5 :(得分:0)
如果你创建一个名为
的布尔变量会更好
boolean lame;
并使方法检查其值
isLame(){
return lame;
}
通过直接访问变量来调用方法通常更好。
答案 6 :(得分:0)
根据Alibaba-Java-Coding-Guidelines
8. [必须]在定义布尔变量时,请勿添加“ is”作为前缀,因为在某些Java框架中它可能导致序列化异常。
计数器示例:boolean isSuccess;方法名称为isSuccess(),然后RPC框架将变量名称推断为“ success”,由于找不到正确的属性,导致序列化错误。
答案 7 :(得分:0)
从结构转储或 SQL SELECT 查询的结果中查看实际值的含义非常有用意味着。例如,如果您只看到 mandatory
是 1
,那么您无法确定它的含义:
1
代表 true
(相对于 false
)1
(相对于 2
或 3
)像 isMandatory
这样的名称清楚地表明这是一个布尔值。
另一方面,根据前缀后面的单词的含义,使用其他前缀(如 isSomething
、hasSomething
、doesSomething
等)是有意义的。例如, isValid
、hasChildren
、doesExist
等。将它们混淆,例如 isChildren
,会在语法上不正确且令人讨厌。
因此,不要强制使用 is
。任何暗示真/假意义的东西都可以。如wasChecked
、hadInvestigation
等
我也使用这个规则来命名变量、数据库字段和函数/方法。
与问题没有严格关联,但相关:
我喜欢将表示基数的变量和字段称为 numOf<Whatever>
。例如,numOfChildren
、numOfItems
等。
我喜欢将表示时间戳的值命名为 <happened>At
之类的名称,例如 createdAt
、updatedAt
、approvedAt
等。
答案 8 :(得分:-2)
遵循语言记录的约定。如果没有约定:
完全省略变量命名中的类型信息。
其中包括is
的布尔值。
boss.lame ? limp() : sprint()
对于具有强类型的语言,该信息是多余的。
对于没有强类型输入的语言,信息仍然是多余的,因为IDE和所有可用的各种工具现在都可以帮助键入而不必使名称复杂。
is
是动词。 is_lame()
应该是返回布尔值的访问器方法。