5
防禦性程式設計(defensive programming)與安全程式設計(secure programming) (blog.sars.tw)
freemyway 積分 2 編輯於

有多少人在寫 if 判斷式的時候,會把常數放前面、變數放後面?

Kros 積分 1

我都用 ide 的快速鍵,按一下就交換了~

chchwy 積分 1

個人從來不用 yoda condition ,可讀性還是差。

應該呼籲的是不要在同一行做賦值跟比較,賦值就賦值,比較就比較,切成兩行。這樣就不需要花腦袋去判斷 if () 裡面到底是故意要賦值還是漏寫等號。

qrtt1 積分 0

我啊,而且看到新人沒這樣寫,還會加減提醒他一下。

afutseng 積分 0

+1,我們團隊 coding style 要求使用 yoda condition。

whitglint 積分 0

覺得如果 compiler、IDE 能抓出來就不需要倒著講話了...

kaif 積分 1

考量 == 寫成 = 的機率,我還是會讓變數在前面,讓理解code順暢些

IngramChen 積分 2

現在 IDE 都會檢查這種錯誤了,所以可以放心將變數寫在前面

william 積分 0

而且,如果有最基本的 unit test,這麼明顯的錯誤,應該很早就挑出來了。

還是以明晰的方式寫程式比較重要。

IngramChen 積分 0

不,這種不可預期的 assignment 是 side effect,可能要同時跑好幾個 method 的 test 才可以發現這種錯誤 (這樣已經不算 unit test 了)。

所以 基本的 unit test 是抓不出這樣的錯誤…

IngramChen 積分 1 編輯於

java 有時候需要常數寫在前面 (跟防禦性設計這命題一樣,不過是擋 NullPointerException

if ("mydata".equals(dataString)) {
freemyway 積分 0

這應該是因為物件導向的關係?

"mydata" 本身是個物件,呼叫 equals 這個 method 來完成比較的工作,如果直接用 == 比較,會變成比較物件的記憶體位址。

kaif 積分 1

不是==喔,是和` if (dataString.equals(mydata""))`比較

freemyway 積分 0 編輯於

喔喔我搞錯了! 是要避免 dataString 是 Null Pointer! 感謝!

pcbill 積分 0

sonarqube 的 rule 有一條建議要這樣寫。當掃出來時,再去改即可。