2010-03-26 94 views
3

如果我只是想检查,如果事情是不可能或不(即,我将不使用的东西像if(possible)),我应该命名布尔notPossible和使用if(notPossible)或者我应该命名为possible和使用if(!possible)呢?命名布尔

可以肯定的是,如果我还要检查它是否为possible,我会命名布尔可能并使用if(possible)以及else,对不对?

+4

我宁愿保持在正的形式布尔值(isAllowed,可能授权),除非有一个很好的理由来反转逻辑。 它可以帮助我保持一致的约定,并且我发现!在很多情况下可能更容易阅读(不可能)(!不可能?)。所有这一切,我通常也试图避免需要/使用布尔标志。 – 2010-03-26 21:35:15

回答

4

我倾向于在这里的积极性方面犯错,并使用possible。这意味着有人不能再写一些代码,这样做...

if (!notPossible) 

这是不可读的。

+3

两个否定......这意味着它完全*不可能正确吗? – mpen 2010-03-26 21:38:37

+3

或者你可以更进一步,写下:'if(!notImpossible)' – 2010-03-26 21:47:03

+0

或者如果我们使用Alex的行话if(!lacksImpossibility)' – 2010-03-26 21:49:59

6

您应该使用isPossible

类似notPossible等布尔值的负面名字是一个非常糟糕的主意。您可能最终不得不编写诸如if (!notPossible)之类的代码,这会使代码难以阅读。不要这样做。

+0

是的,如果使用否定名称,则必须编写像if(!(notPossible || notProbable))这样的颠倒代码,而不是更直观的if(可能&&可能)。 – Will 2010-03-26 21:35:13

+0

...或“useCurrentTariff”或“hasSurcharge”(如适用) – 2010-03-26 21:35:33

+0

+1。即使我对消极情绪更感兴趣,我也总是试图让所有事情都处于“积极”的状态。另一个例子是使用'is_open'而不是'is_closed' ......我想大多只是为了保持一致性。 – mpen 2010-03-26 21:37:08

0

无论哪个更容易阅读您的特定应用程序。只要确定你没有结束“if(!notPossible)”。

0

我认为最好避免在变量名中使用负数,这样可以避免if(!notPossible)的双重否定。

0

我推荐使用isPossible。只要命名布尔变量,就可以使用'is'(或者'has')。这是合乎逻辑的,因为你想知道是否有可能,对吧?

+0

如果你想找出是否有什么是不可能的? – wrongusername 2010-03-26 21:40:28

+2

你总是可以在'isPossible'上放一个'!',但是你不能把'not'从'notPossible'中取出。 – tloflin 2010-03-26 22:15:21

1

我喜欢的名字一致短动词前缀,如ishas布尔值,我会找到一个not前缀独特而棘手的精神“解析”(所以,我怀疑,代码会很多读者,无论是否意识到这种感觉---) - 所以,我要么命名变量isPossible(和使用!isPossible),或只是命名变量isImpossible(许多形容词有这样的方便的反义词,并为前缀has你可以使用前缀lacks来形成整个事物的反义词;-)。

0

我同意负面评论布尔人是一个坏主意,但有时可能以正面的方式重新构建条件。例如,您可以使用pathIsBlocked而不是cannotProceed,或者使用isImortal而不是isNotAbleToDie。

1

我通常会尝试命名我的标记,以便它们在使用它们时尽可能精确地读取。这意味着尝试命名它们,以便在使用它们时不会被否定。

我知道有些人坚持说所有的名字都是正面的,这样人们就不会混淆名字和头脑中的否定。对于类接口中的布尔值来说,这可能是一个很好的策略。但如果它的本地到一个单一的源文件,并且我知道所有的电话都会否定它,我宁可看到if (impossible && ...)if (!isPossible && ...)

0

您应该将其命名为准确存储的内容。如果您存储的是否有可能,请将其命名为isPossible。如果您要存储是否不可能将其命名为isImpossible

无论哪种情况,如果您需要检查两种情况,您可以使用else

从你的描述似乎对你更重要的是要检查不可能的,所以我会跟isImpossible去:

if(isImpossible) 
{ 
    // ... 
} 
else 
{ 
    //... 
}