※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2019-05-05 13:53:12
看板 Soft_Job
作者 標題 [請益] 比較值放左邊 變數放右邊
時間 Fri May 3 16:15:04 2019
Hi 軟工板 All,
最近看到一種coding style如
if (True == var1)
就是比較的值放在左邊,變數放在右邊
一直覺得不太習慣
過往寫程式都是變數放左邊
想問各位大大這是有什麼好處
是跟lvalue, rvalue有關嗎 ?
還是其實根本沒差就是一種coding習慣而已 ?
想請各位解惑,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.185.98
※ 文章代碼(AID): #1So_YDO5 (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1556871309.A.605.html
→ : 怕==寫成=而已1F 05/03 16:17
推 : 可以避免一些crash的情況2F 05/03 16:18
→ : 豁然開朗!! 如果寫錯成= compiler就會噴error 感謝回答3F 05/03 16:20
→ : 這樣寫 compiler 可以幫你抓 == 寫成 =4F 05/03 16:20
推 : yoda notation5F 05/03 16:23
→ : www.yinwang.org/blog-cn/2013/04/16/yoda-notation
有趣→ : www.yinwang.org/blog-cn/2013/04/16/yoda-notation
推 : 其實不推薦這種 應該以可讀性為最重要 現在的compiler 設定7F 05/03 16:28
→ : warming as error 後這種typo都可以抓出來
的確可讀有點差,但若是內部寫的compiler不一定那麼完善→ : warming as error 後這種typo都可以抓出來
→ : 某些語言undefined變數這樣寫不會crash 反過來就會了9F 05/03 16:48
→ : 原來有這種防呆的方式0.0 但覺得好不順眼10F 05/03 16:50
推 : 好不順眼啊..頭痛11F 05/03 16:56
→ : yoda?12F 05/03 16:56
推 : 我是比較喜歡判斷式裡面不要塞等號啦XD13F 05/03 16:59
這個也會有問題吧例如非零值在if內都會是True,這個不見得是預期的結果
推 : 我還看過等於放左右兩邊的咧15F 05/03 17:22
→ : =OO=
天賦不夠高,這是啥意思XDDD→ : =OO=
推 : coverity這種靜態分析工具應該可以抓出來if(a=b)17F 05/03 19:27
推 : 都出來工作了 怎麼還會 == 寫成 =18F 05/03 19:27
越是簡單的bug越是可怕啊wwww推 : 我也習慣倒過來寫,這樣有影響可讀性喔?19F 05/03 20:07
推 : 以前windows 派 code complete裡面推薦這種寫法 防衛性程式20F 05/03 20:11
→ : ? 但後面出的軟體書 大部分都不推薦此法
防呆 vs 可讀性 都幾?→ : ? 但後面出的軟體書 大部分都不推薦此法
推 : 有誰寫code不手殘22F 05/03 20:14
推 : 等號內可以賦值的語言才會這樣寫23F 05/03 20:16
→ : 有時要賦值 有時要做判斷 難免搞混
→ : if 內才對 打錯抱歉
※ 編輯: k300plus (180.177.0.139), 05/03/2019 20:30:51→ : 有時要賦值 有時要做判斷 難免搞混
→ : if 內才對 打錯抱歉
推 : 很不直覺,第一次看覺得傻眼26F 05/03 20:33
推 : if( a == 0 ) 不要用 if(a) 這是可以解決的27F 05/03 20:44
→ : 看個人習慣囉
→ : 這種寫作習慣沒對錯 沒bug 就好
→ : 看個人習慣囉
→ : 這種寫作習慣沒對錯 沒bug 就好
→ : 我都寫 = =30F 05/03 20:54
Build code team就= =→ : 用.equals()會放左邊31F 05/03 21:04
→ : equals 常數放左邊避免null32F 05/03 21:21
了解推 : 避免有null的狀況發生33F 05/03 21:21
推 : if(a == 0) 跟if(a) 是不一樣的吧…34F 05/03 21:25
→ : 依照公司規定35F 05/03 21:31
→ : 要習慣用.equals() 不然哪天手殘把Object拿來比36F 05/03 21:32
推 : 等你哪天發現bug是因為手殘寫成if(a=0)就知道惹...37F 05/03 21:40
推 : 給philip 我要打 if( a != 0 ), 打錯~38F 05/03 21:43
我剛誤解你不要打等號的意思是if(a),if(a)根本超confused啊我同意可以用 != 來達到跟 == 相同邏輯
※ 編輯: k300plus (180.177.0.139), 05/03/2019 22:03:17
推 : 那如果是(True != var1)呢, != 總不會打成=吧?39F 05/03 22:01
對對如上回覆,不過你應該是要表達用 != 就可以寫成 (var1 != True) 啦 XD※ 編輯: k300plus (180.177.0.139), 05/03/2019 22:06:26
→ : 怕手殘阿40F 05/03 22:28
噓 : 防止assignment expression,通常在C比較常用。這都不懂41F 05/03 23:03
→ : 也想出來混
→ : 也想出來混
→ : 懂這個也沒有比較厲害啊 乾五叔要給人家這樣講_(:_」∠)_..43F 05/03 23:09
推 : 回原po yoda conditions 用了三年,各種語言大至上都這樣用
→ : 過 但最後還是不寫了
→ : 一個是當初寫C#這樣寫很醜 二來是VS環境會提示
→ : 三其他語言平常已經習慣寫test 所以很少碰到出錯
→ : 把 == 寫成 = 的機會大約key了五十幾萬字出現一次 發現時是
→ : 寫test發現的
→ : 但沒有寫test以及尚未用慣yoda condition 的確有發生過不少
→ : 次
→ : 還有就是慎選字型跟字體大小。
推 : 回原po yoda conditions 用了三年,各種語言大至上都這樣用
→ : 過 但最後還是不寫了
→ : 一個是當初寫C#這樣寫很醜 二來是VS環境會提示
→ : 三其他語言平常已經習慣寫test 所以很少碰到出錯
→ : 把 == 寫成 = 的機會大約key了五十幾萬字出現一次 發現時是
→ : 寫test發現的
→ : 但沒有寫test以及尚未用慣yoda condition 的確有發生過不少
→ : 次
→ : 還有就是慎選字型跟字體大小。
推 : 感覺很糟糕的寫法53F 05/03 23:36
推 : 不會寫出來呢54F 05/03 23:40
→ : 我個人覺得很糟糕,如果你可以習慣這種,那也可以習慣 ==55F 05/03 23:41
→ : 如果不能100%習慣,那你也沒完全防止原本可能的失誤
→ : 所以我不覺得是 防呆 vs 可讀,而是 呆 vs (呆+不可讀)
→ : 另外 pig2014也不知道在兇幾點,原po有說要出來混嗎
→ : 如果不能100%習慣,那你也沒完全防止原本可能的失誤
→ : 所以我不覺得是 防呆 vs 可讀,而是 呆 vs (呆+不可讀)
→ : 另外 pig2014也不知道在兇幾點,原po有說要出來混嗎
→ : 覺得邪教...59F 05/04 00:13
推 : 如果寫 if ((a = 0) && (b > 5)) 有習慣加括號的話60F 05/04 00:19
→ : compiler 就抓不到了...
→ : compiler 就抓不到了...
推 : 沒想到.equals可以這樣用 受教了62F 05/04 00:35
推 : 這種寫法很好 我每種語言都習慣這樣做63F 05/04 00:48
推 : equals是一定要這樣用,可以避免null exception64F 05/04 00:58
推 : 蠻有趣的觀點,長知識了65F 05/04 01:31
推 : 防bug但是同事都不習慣 說反正bug那麼多也不差這一個 好像66F 05/04 02:35
→ : 也有道理...就算了...XDD
→ : 也有道理...就算了...XDD
→ : 不直覺+168F 05/04 03:07
→ : 防 bug 的正確方式是寫 test, 不是這種 hack69F 05/04 03:25
推 : 想問寫test是什麼意思70F 05/04 04:00
推 : test 有寫好,這種錯誤應該是抓得出來的71F 05/04 04:09
→ : 意思就是你不該依賴 compiler 去告訴你 true = x 是錯的72F 05/04 04:12
→ : 而是當你不小心寫了 x = true, unit test 會 fail
→ : 而是當你不小心寫了 x = true, unit test 會 fail
推 : @yangs unit test74F 05/04 05:41
推 : 當你記得要把左右顛倒時,你怎麼還會忘記寫==75F 05/04 07:41
推 : 寫程式寫一段時間以後,用==甚至===來比較已經很習慣
→ : 雖然犯錯很多還很少犯這種錯
推 : 寫程式寫一段時間以後,用==甚至===來比較已經很習慣
→ : 雖然犯錯很多還很少犯這種錯
→ : 很古老的新手寫法… 已經很久沒看到了78F 05/04 09:46
→ : 與其計較這個,不如好好規範變數命名規則
→ : 專案變大會讓人困擾的,這還排不上前10
→ : 與其計較這個,不如好好規範變數命名規則
→ : 專案變大會讓人困擾的,這還排不上前10
→ : 以前看過才知道是防 null 但是最後自己還是只能接受一半81F 05/04 10:41
→ : 請問我寫C和C#的做法是bool isChecked=(varA==5); i82F 05/04 10:47
→ : f isChecked {...}這樣不就兼顧防呆和可讀嗎?
→ : f isChecked {...}這樣不就兼顧防呆和可讀嗎?
推 : 搜尋Yoda condition84F 05/04 11:11
→ : 我自己是不推薦啦 但如果出錯的確很好抓 不過經驗夠85F 05/04 11:18
→ : 之後其實這種錯也很好抓
→ : 之後其實這種錯也很好抓
→ : 如果真的寫錯應該在unit test就發現了吧?我選可讀性87F 05/04 11:23
推 : 這是面試必考題欸88F 05/04 12:07
→ : 看久就習慣了 自動兩邊swap...89F 05/04 12:37
→ : 一般ide會設定if不能assign90F 05/04 14:56
噓 : 面試白板題這樣寫 是加分的好嗎 紅明顯91F 05/04 16:02
推 : 防禦性寫法 讓編譯器遇到 True = var 的typo報error92F 05/04 16:26
→ : 個人也是不推薦這樣的寫法93F 05/04 16:42
推 : 面試遇過這問題,顯示出公司code品質管理很差94F 05/04 17:44
→ : 應該是地雷公司才會問
→ : 應該是地雷公司才會問
推 : 以前會用這招,後來發現一些compiler或是ckeck coding s96F 05/04 18:16
→ : tyle對這些寫法會跳warning, 後來就不寫了
→ : tyle對這些寫法會跳warning, 後來就不寫了
推 : attraction 大 方便透露是哪家公司這樣寫可以加分嗎98F 05/04 19:01
→ : 話說防禦性寫法有沒有書籍或資料專門講的啊?99F 05/04 19:07
推 : ==100F 05/04 19:58
推 : 有規則是可以抓 if條件裡面只用一個=的嗎? 另外也有101F 05/04 20:56
→ : 點好奇是什麼樣的情況下才會真的想要在if條件裡面賦值
→ : XD?
→ : 點好奇是什麼樣的情況下才會真的想要在if條件裡面賦值
→ : XD?
推 : 不等於0就不進入的那種是可以啦。104F 05/04 21:01
→ : 但有CodeReview的話多半會被擋下來吧....
→ : 說錯,等於0就不進入
→ : 但有CodeReview的話多半會被擋下來吧....
→ : 說錯,等於0就不進入
→ : 映像中 code complete 有在講107F 05/04 21:31
推 : 不順眼沒錯,但是編譯期就幫你防錯概念很好108F 05/04 21:43
→ : 不以為然的人,似乎都忘了對SQL和VB這些不用==做比109F 05/04 23:38
→ : 對的語言,這種防禦是很有實際價值的
→ : 對的語言,這種防禦是很有實際價值的
推 : 重點不是 == 寫成 =, 重點是 = (assign operator) 有回111F 05/05 00:10
→ : 傳值. VB和SQL跟本沒這問題, 有個屁價值?
→ : 傳值. VB和SQL跟本沒這問題, 有個屁價值?
--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 158
作者 k300plus 的最新發文:
- 39F 14推 2噓
- 6F 4推
- 『只有我不存在的城市』 動畫瘋年底下架片單之一 記得當年看完的時候好像對這部印象沒有到特別好 忘記是劇情節奏不好還是動畫改編不太好(?) JK愛梨雖然很婆,但戲份很少也是一個小遺憾 不過至今講到穿越 …44F 34推
- 8F 7推
- 31F 19推 3噓
點此顯示更多發文記錄
回列表(←)
分享