2017-01-16 119 views
0

最好的做法我最近不得不維持一個傳統項目,代碼是沒有編碼模式的一塌糊塗但是有一兩件事引起了我的注意,在某些情況下,布爾類型是在三種不同的方式創建:什麼布爾類型

const bool = true; //conventional 
const bool = 1; 
const bool = !0; 

我知道沒有編碼模式是一種代碼嗅覺,但我想知道使用不同於常用的練習有什麼好處嗎?某些編譯器或解釋器的性能提升?我真的被鼓動了。你想知道有人知道嗎?

+0

什麼是常用的做法?蟒蛇,bash或C? – mouviciel

+0

請不要忘記標記你認爲最好的答案,或者解釋爲什麼你覺得目前提供的答案並不令人滿意。 –

回答

1

你應該總是使用常規的方式來定義一個布爾值,它是truefalse(如已經提到拔示巴)


的JavaScript,最值導致truthy值的,如果條件。唯一例外的規則是下列值(source):

  • false
  • 0(零)
  • ""(空字符串)
  • null
  • undefined
  • NaN(特殊數值意義不是數字!)

你舉的例子:

const bool = true; // the regular way to define a boolean 
const bool = 1; // a Number, this is truthy in an if-condition, but still, it is just a Number 
const bool = !0; // negates a number -> it actually converts it to a boolean during the negation. So, it is actually the same as bool = false; 

如果您在另一種語言編程,也並不總是圍繞布爾。如果您正在編寫的編程語言中存在布爾值,那麼您一定要使用它。

一些例子:

  1. 爪哇,有原始數據類型布爾型(truefalse)和有一個布爾包裝類,其中還包含用於轉換等。(Boolean.TRUEBoolean.FALSE)方法。其他值不能在if條件下評估。
  2. Perl,沒有布爾值。但是,您可以使用數字值01進行比較。它類似於JavaScript的,因爲它也求最值truthy,除下列(source):
    • 0
    • '0'
    • undef
    • ''#空標
    • ()#清空列表
    • ('')
+0

Upvoted。我看不出這個答案有什麼問題。 – Bathsheba

1

使用true和false。其他任何事情都不太清楚。

你寫了一行代碼。你會讀它數百次。

1

這篇文章特別提到了C/C++,但它反映了大多數語言。

C++標準狀態(§4.7/ 4):

如果源類型爲布爾假被轉換成零和 true值的值被轉換爲一個。

它們都被允許的原因僅僅是由於編譯器將「真值」轉換爲單個位表示的方式。

它們在運行編譯器時佔用相同的空間量。約定的原因僅僅是爲了可讀性 - 出於這個原因,並不是所有的「編譯器有效」表示都應該被認爲是同樣可取的。正如Google's C++ Style Guide提到:

優化讀者,而不是作者

我們的代碼庫(並提交給它最 各個組件)預計將持續 相當長的一段時間。因此,讀取我們的代碼的大部分時間將花費比編寫更多的時間。我們明確選擇優化 我們的平均軟件工程師閱讀,維護和 調試代碼的經驗,而不是在編寫所述 代碼時容易。

總之,可讀性就是一切。

+0

Upvoted。我看不出這個答案有什麼問題。 – Bathsheba