2022年5月19日 星期四

[C++ / C#] if 判斷式內,把常數放在左側比較安全!

 if ( a == 1 )           // 假設變數a為int型別

相信很多人都寫過這樣的判斷式。

由於口語的關係,

我們常常習慣會把變數是否等於某個答案這樣的敘述直接轉換成程式碼,

但如果哪一天少打一個等號( = ) 怎辦?

像這樣:

 if ( a = 1 )

編譯器一樣會通過,也會正常執行,因為常數是可以被賦予給變數 a 的,

但結果會是無法預期的!如下所示(以C++為例):

編譯成功且正常執行,

但a將會被設定成1。


因此在判斷式內請習慣把常數放在左側(左值):

 if ( 1 == a )

即使少打了一個等號 ( = ),變成這樣:

 if ( 1 = a )

編譯器就會出現錯誤,因為常數不能被賦予數值啊!

讓你更容易發現程式碼寫錯了。

實際訊息如下:


前公司的強者同事曾經這樣建議過我這樣的寫法,

但沒特別解釋為什麼,我也沒特別去理解,

一直到現職主管開啟了C++17的讀書會,

大家從頭開始再學一次,也吸收新語法,

分享經驗才理解原來這可能是原因之一,

儘管我們都知道在判斷式內不能只有一個等號,

但很少為了避免這個疏忽而做出一些寫法上的改變。

雖然是小習慣,但我覺得很值得紀錄。

沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。