if (a == true) 和 if (a) 是不同的,不要寫 if (a == true)

在Apple webkit的coding style裡就有一條說不要這樣寫

if (a == true) 和 if (a) 是不同的 (測試過C/C++, java script)
乍看之下,似乎只是多寫了 == true,有人認為這樣邏輯上比較清楚 (我不這麼認為)
實際上true會被轉換成1再比較,意義上不是a的boolean是否為true
如果你真的要跟1比較,請寫成 == 1


如果a是int的情況下,又是負數,例如 -1

  1. if (a == true) 實際上是 if (-1 == 1), 不會進branch
  2. if (a) a不是0,會進去branch

C/C++的慣例
boolean true定義為1,false定義為0
表示error code時成功用0,失敗用非零 (可能是正或負數,看API定義)
以語言的設計或定義,我覺得不寫 == true 才是比較好的寫法
一方面字數比較少,閱讀邏輯上也沒有比較差
我也沒看過哪個open source軟體寫== true (js似乎會寫 === true,不熟)


順便一提,我還看過 isXXX() ? true : false 的,這個語意上應該沒有差
直接寫isXXX() 不就好了? 理由一樣,養成好的習慣吧


一個簡單的C++驗證程式
#include <iostream>

int main(int argc, char *argv[]) {
        int a = -1;
        if (a == true)
                std::cout << "a == true\n";
        else
                std::cout << "a != true\n";

        return 0;
}

留言

這個網誌中的熱門文章

OBS 抓不到畫面, 視窗, 遊戲擷取, 黑或白畫面, 當掉 ,卡住, black/white screen, window game capture, crash, freeze

優化實況(一) OBS設定 streaming settings

OBS plugin obs-text 顯示播放中音樂, display playing music