作者:
k300plus (300plus)
2019-05-03 16:15:04Hi 軟工板 All,
最近看到一種coding style如
if (True == var1)
就是比較的值放在左邊,變數放在右邊
一直覺得不太習慣
過往寫程式都是變數放左邊
想問各位大大這是有什麼好處
是跟lvalue, rvalue有關嗎 ?
還是其實根本沒差就是一種coding習慣而已 ?
想請各位解惑,謝謝
作者:
k300plus (300plus)
2019-05-03 16:20:00豁然開朗!! 如果寫錯成= compiler就會噴error 感謝回答
作者: eatpupu (吃大便) 2019-05-03 16:20:00
這樣寫 compiler 可以幫你抓 == 寫成 =
作者:
yyhsiu (hsiu)
2019-05-03 16:23:00yoda notationwww.yinwang.org/blog-cn/2013/04/16/yoda-notation
作者:
Gway (我愛的你 也愛我 好嗎?)
2019-05-03 16:28:00其實不推薦這種 應該以可讀性為最重要 現在的compiler 設定warming as error 後這種typo都可以抓出來
作者:
stkoso (Asperger)
2019-05-03 16:48:00某些語言undefined變數這樣寫不會crash 反過來就會了
作者:
sherees (ShaunTheSheep)
2019-05-03 16:56:00yoda?
作者: hidog (.....) 2019-05-03 16:59:00
我是比較喜歡判斷式裡面不要塞等號啦XD
作者:
deray (Deray)
2019-05-03 17:08:00作者:
yamakazi (大安吳彥祖)
2019-05-03 19:27:00coverity這種靜態分析工具應該可以抓出來if(a=b)
作者:
taikobo (勉強になるなぁ...)
2019-05-03 20:07:00我也習慣倒過來寫,這樣有影響可讀性喔?
作者:
Gway (我愛的你 也愛我 好嗎?)
2019-05-03 20:11:00以前windows 派 code complete裡面推薦這種寫法 防衛性程式? 但後面出的軟體書 大部分都不推薦此法
作者: codehard 2019-05-03 20:14:00
有誰寫code不手殘
作者:
groza (狗煞)
2019-05-03 20:16:00等號內可以賦值的語言才會這樣寫有時要賦值 有時要做判斷 難免搞混if 內才對 打錯抱歉
作者: hidog (.....) 2019-05-03 20:44:00
if( a == 0 ) 不要用 if(a) 這是可以解決的看個人習慣囉這種寫作習慣沒對錯 沒bug 就好
作者:
sourbait (sourbait)
2019-05-03 20:54:00我都寫 = =
作者:
solonwu (絕對的信仰可以革新命運)
2019-05-03 21:21:00避免有null的狀況發生
作者: philip80220 (花) 2019-05-03 21:25:00
if(a == 0) 跟if(a) 是不一樣的吧…
作者:
s860134 (s860134)
2019-05-03 21:31:00依照公司規定
要習慣用.equals() 不然哪天手殘把Object拿來比
等你哪天發現bug是因為手殘寫成if(a=0)就知道惹...
作者: hidog (.....) 2019-05-03 21:43:00
給philip 我要打 if( a != 0 ), 打錯~
作者:
debut (humming bird)
2019-05-03 22:01:00那如果是(True != var1)呢, != 總不會打成=吧?
作者:
invidia (莎莉竟然會飛)
2019-05-03 22:28:00怕手殘阿
作者:
pig2014 (Rocking Man)
2019-05-03 23:03:00防止assignment expression,通常在C比較常用。這都不懂也想出來混
作者:
alog (A肉哥)
2019-05-03 23:09:00懂這個也沒有比較厲害啊 乾五叔要給人家這樣講_(:_」∠)_..回原po yoda conditions 用了三年,各種語言大至上都這樣用過 但最後還是不寫了一個是當初寫C#這樣寫很醜 二來是VS環境會提示三其他語言平常已經習慣寫test 所以很少碰到出錯把 == 寫成 = 的機會大約key了五十幾萬字出現一次 發現時是寫test發現的但沒有寫test以及尚未用慣yoda condition 的確有發生過不少次還有就是慎選字型跟字體大小。
作者:
tvbic 2019-05-03 23:36:00感覺很糟糕的寫法
作者:
yyhsiu (hsiu)
2019-05-03 23:41:00我個人覺得很糟糕,如果你可以習慣這種,那也可以習慣 ==如果不能100%習慣,那你也沒完全防止原本可能的失誤所以我不覺得是 防呆 vs 可讀,而是 呆 vs (呆+不可讀)另外 pig2014也不知道在兇幾點,原po有說要出來混嗎
作者: finn79426 (xixi) 2019-05-04 00:13:00
覺得邪教...
作者: hungys (hungys) 2019-05-04 00:19:00
如果寫 if ((a = 0) && (b > 5)) 有習慣加括號的話compiler 就抓不到了...
作者:
feeya (24 August 升格為鄉民)
2019-05-04 00:48:00這種寫法很好 我每種語言都習慣這樣做
equals是一定要這樣用,可以避免null exception
作者:
xpop777 (Archie)
2019-05-04 01:31:00蠻有趣的觀點,長知識了
作者:
xxtuoo (浪費時間不好QQ)
2019-05-04 02:35:00防bug但是同事都不習慣 說反正bug那麼多也不差這一個 好像也有道理...就算了...XDD
作者: Cavalier (Cavalier) 2019-05-04 03:25:00
防 bug 的正確方式是寫 test, 不是這種 hack
作者:
yyhsiu (hsiu)
2019-05-04 04:09:00test 有寫好,這種錯誤應該是抓得出來的
作者: Cavalier (Cavalier) 2019-05-04 04:12:00
意思就是你不該依賴 compiler 去告訴你 true = x 是錯的而是當你不小心寫了 x = true, unit test 會 fail
作者:
dces4212 (flawless)
2019-05-04 05:41:00@yangs unit test
當你記得要把左右顛倒時,你怎麼還會忘記寫==寫程式寫一段時間以後,用==甚至===來比較已經很習慣雖然犯錯很多還很少犯這種錯
作者:
WunoW (WunoW)
2019-05-04 09:46:00很古老的新手寫法… 已經很久沒看到了與其計較這個,不如好好規範變數命名規則專案變大會讓人困擾的,這還排不上前10
作者:
angusyu (〒△〒)
2019-05-04 10:41:00以前看過才知道是防 null 但是最後自己還是只能接受一半
請問我寫C和C#的做法是bool isChecked=(varA==5); if isChecked {...}這樣不就兼顧防呆和可讀嗎?
我自己是不推薦啦 但如果出錯的確很好抓 不過經驗夠之後其實這種錯也很好抓
作者: rocwild (外國死小孩) 2019-05-04 11:23:00
如果真的寫錯應該在unit test就發現了吧?我選可讀性
作者:
orz811017 (orz811017)
2019-05-04 12:37:00看久就習慣了 自動兩邊swap...
作者:
testPtt (測試)
2019-05-04 14:56:00一般ide會設定if不能assign
防禦性寫法 讓編譯器遇到 True = var 的typo報error
作者: t64141 (榕樹) 2019-05-04 16:42:00
個人也是不推薦這樣的寫法
面試遇過這問題,顯示出公司code品質管理很差應該是地雷公司才會問
以前會用這招,後來發現一些compiler或是ckeck coding style對這些寫法會跳warning, 後來就不寫了
作者:
yyhsiu (hsiu)
2019-05-04 19:01:00attraction 大 方便透露是哪家公司這樣寫可以加分嗎
有規則是可以抓 if條件裡面只用一個=的嗎? 另外也有點好奇是什麼樣的情況下才會真的想要在if條件裡面賦值XD?
不等於0就不進入的那種是可以啦。但有CodeReview的話多半會被擋下來吧....說錯,等於0就不進入
作者: ggBird (ggBird) 2019-05-04 21:31:00
映像中 code complete 有在講
不以為然的人,似乎都忘了對SQL和VB這些不用==做比對的語言,這種防禦是很有實際價值的
作者:
bibo9901 (function(){})()
2019-05-05 00:10:00重點不是 == 寫成 =, 重點是 = (assign operator) 有回傳值. VB和SQL跟本沒這問題, 有個屁價值?
作者:
usoko (time to face reality)
2019-05-07 16:03:00我一直以來都無法理解會怕==寫成=的人到底是有什麼問題我知道有些語言可能沒有夠好的compiler跟IDE幫你擋掉但高階語言還在用這種寫法就讓人匪夷所思