是用“是”来命名布尔变量的不良做法?

时间:2011-08-05 02:41:23

标签: variables boolean naming

现在命名以“是”不良做法开始的布尔人吗?我的经理认为“isAnything”已经过时且做法很差。这是真的吗?

myManager.isLame ? correct() : incorrect();

9 个答案:

答案 0 :(得分:23)

在很多语言中经常使用它,但我不知道是否可以确定它是首选方法。

我认为一致性和特定团队中每个人使用相同的标准/风格是重要的事情。

答案 1 :(得分:18)

我不会在这里使用任何严格的规则。虽然我发现诸如'Is'之类的前缀在识别布尔属性时很有用,但在很多情况下'Is'不是最佳选择。

  • Car.HasFlatTyre vs Car.IsFlatTyre
  • Cars.AreAllRed vs Cars.IsAllRed
  • 等...

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 查询的结果中查看实际值的含义非常有用意味着。例如,如果您只看到 mandatory1,那么您无法确定它的含义:

  • 一个布尔值,其中 1 代表 true(相对于 false
  • 必填项目的数量为 1(相对于 23

isMandatory 这样的名称清楚地表明这是一个布尔值。

另一方面,根据前缀后面的单词的含义,使用其他前缀(如 isSomethinghasSomethingdoesSomething 等)是有意义的。例如, isValidhasChildrendoesExist 等。将它们混淆,例如 isChildren,会在语法上不正确且令人讨厌。

因此,不要强制使用 is。任何暗示真/假意义的东西都可以。如wasCheckedhadInvestigation

我也使用这个规则来命名变量、数据库字段和函数/方法。

与问题没有严格关联,但相关:

  1. 我喜欢将表示基数的变量和字段称为 numOf<Whatever>。例如,numOfChildrennumOfItems 等。

  2. 我喜欢将表示时间戳的值命名为 <happened>At 之类的名称,例如 createdAtupdatedAtapprovedAt 等。

答案 8 :(得分:-2)

遵循语言记录的约定。如果没有约定:

完全省略变量命名中的类型信息。

其中包括is的布尔值。

boss.lame ? limp() : sprint()

对于具有强类型的语言,该信息是多余的。

对于没有强类型输入的语言,信息仍然是多余的,因为IDE和所有可用的各种工具现在都可以帮助键入而不必使名称复杂。

is是动词。 is_lame()应该是返回布尔值的访问器方法。