2010-03-26 93 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 
{ 
    //... 
}