Soft_Job 板


LINE

Hi 軟工板 All, 最近看到一種coding style如 if (True == var1) 就是比較的值放在左邊,變數放在右邊 一直覺得不太習慣 過往寫程式都是變數放左邊 想問各位大大這是有什麼好處 是跟lvalue, rvalue有關嗎 ? 還是其實根本沒差就是一種coding習慣而已 ? 想請各位解惑,謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.185.98
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1556871309.A.605.html
1F:→ WorkForFree: 怕==寫成=而已 05/03 16:17
2F:推 AudiA4Avant: 可以避免一些crash的情況 05/03 16:18
3F:→ k300plus: 豁然開朗!! 如果寫錯成= compiler就會噴error 感謝回答 05/03 16:20
4F:→ eatpupu: 這樣寫 compiler 可以幫你抓 == 寫成 = 05/03 16:20
5F:推 yyhsiu: yoda notation 05/03 16:23
6F:→ yyhsiu: www.yinwang.org/blog-cn/2013/04/16/yoda-notation 05/03 16:23
有趣
7F:推 Gway: 其實不推薦這種 應該以可讀性為最重要 現在的compiler 設定 05/03 16:28
8F:→ Gway: warming as error 後這種typo都可以抓出來 05/03 16:28
的確可讀有點差,但若是內部寫的compiler不一定那麼完善
9F:→ stkoso: 某些語言undefined變數這樣寫不會crash 反過來就會了 05/03 16:48
10F:→ shooter555: 原來有這種防呆的方式0.0 但覺得好不順眼 05/03 16:50
11F:推 DCTmaybe: 好不順眼啊..頭痛 05/03 16:56
12F:→ sherees: yoda? 05/03 16:56
13F:推 hidog: 我是比較喜歡判斷式裡面不要塞等號啦XD 05/03 16:59
這個也會有問題吧 例如非零值在if內都會是True,這個不見得是預期的結果
14F:推 deray: https://i.imgur.com/9AN4v7n.jpg 05/03 17:08
15F:推 crossdunk: 我還看過等於放左右兩邊的咧 05/03 17:22
16F:→ crossdunk: =OO= 05/03 17:22
天賦不夠高,這是啥意思XDDD
17F:推 yamakazi: coverity這種靜態分析工具應該可以抓出來if(a=b) 05/03 19:27
18F:推 rhythm7321: 都出來工作了 怎麼還會 == 寫成 = 05/03 19:27
越是簡單的bug越是可怕啊wwww
19F:推 taikobo: 我也習慣倒過來寫,這樣有影響可讀性喔? 05/03 20:07
20F:推 Gway: 以前windows 派 code complete裡面推薦這種寫法 防衛性程式 05/03 20:11
21F:→ Gway: ? 但後面出的軟體書 大部分都不推薦此法 05/03 20:11
防呆 vs 可讀性 都幾?
22F:推 codehard: 有誰寫code不手殘 05/03 20:14
23F:推 groza: 等號內可以賦值的語言才會這樣寫 05/03 20:16
24F:→ groza: 有時要賦值 有時要做判斷 難免搞混 05/03 20:17
25F:→ groza: if 內才對 打錯抱歉 05/03 20:17
※ 編輯: k300plus (180.177.0.139), 05/03/2019 20:30:51
26F:推 mithuang: 很不直覺,第一次看覺得傻眼 05/03 20:33
27F:推 hidog: if( a == 0 ) 不要用 if(a) 這是可以解決的 05/03 20:44
28F:→ hidog: 看個人習慣囉 05/03 20:45
29F:→ hidog: 這種寫作習慣沒對錯 沒bug 就好 05/03 20:45
30F:→ sourbait: 我都寫 = = 05/03 20:54
Build code team就= =
31F:→ twilighthook: 用.equals()會放左邊 05/03 21:04
32F:→ Darkword1987: equals 常數放左邊避免null 05/03 21:21
了解
33F:推 solonwu: 避免有null的狀況發生 05/03 21:21
34F:推 philip80220: if(a == 0) 跟if(a) 是不一樣的吧… 05/03 21:25
35F:→ s860134: 依照公司規定 05/03 21:31
36F:→ ChungLi5566: 要習慣用.equals() 不然哪天手殘把Object拿來比 05/03 21:32
37F:推 LinuxKernel: 等你哪天發現bug是因為手殘寫成if(a=0)就知道惹... 05/03 21:40
38F:推 hidog: 給philip 我要打 if( a != 0 ), 打錯~ 05/03 21:43
我剛誤解你不要打等號的意思是if(a),if(a)根本超confused啊 我同意可以用 != 來達到跟 == 相同邏輯 ※ 編輯: k300plus (180.177.0.139), 05/03/2019 22:03:17
39F:推 debut: 那如果是(True != var1)呢, != 總不會打成=吧? 05/03 22:01
對對如上回覆,不過你應該是要表達用 != 就可以寫成 (var1 != True) 啦 XD ※ 編輯: k300plus (180.177.0.139), 05/03/2019 22:06:26
40F:→ invidia: 怕手殘阿 05/03 22:28
41F:噓 pig2014: 防止assignment expression,通常在C比較常用。這都不懂 05/03 23:03
42F:→ pig2014: 也想出來混 05/03 23:03
43F:→ alog: 懂這個也沒有比較厲害啊 乾五叔要給人家這樣講_(:_」∠)_.. 05/03 23:09
44F:推 alog: 回原po yoda conditions 用了三年,各種語言大至上都這樣用 05/03 23:10
45F:→ alog: 過 但最後還是不寫了 05/03 23:10
46F:→ alog: 一個是當初寫C#這樣寫很醜 二來是VS環境會提示 05/03 23:11
47F:→ alog: 三其他語言平常已經習慣寫test 所以很少碰到出錯 05/03 23:12
48F:→ alog: 把 == 寫成 = 的機會大約key了五十幾萬字出現一次 發現時是 05/03 23:15
49F:→ alog: 寫test發現的 05/03 23:15
50F:→ alog: 但沒有寫test以及尚未用慣yoda condition 的確有發生過不少 05/03 23:16
51F:→ alog: 次 05/03 23:16
52F:→ alog: 還有就是慎選字型跟字體大小。 05/03 23:17
53F:推 tvbic: 感覺很糟糕的寫法 05/03 23:36
54F:推 clamperni: 不會寫出來呢 05/03 23:40
55F:→ yyhsiu: 我個人覺得很糟糕,如果你可以習慣這種,那也可以習慣 == 05/03 23:41
56F:→ yyhsiu: 如果不能100%習慣,那你也沒完全防止原本可能的失誤 05/03 23:42
57F:→ yyhsiu: 所以我不覺得是 防呆 vs 可讀,而是 呆 vs (呆+不可讀) 05/03 23:43
58F:→ yyhsiu: 另外 pig2014也不知道在兇幾點,原po有說要出來混嗎 05/03 23:44
59F:→ finn79426: 覺得邪教... 05/04 00:13
60F:推 hungys: 如果寫 if ((a = 0) && (b > 5)) 有習慣加括號的話 05/04 00:19
61F:→ hungys: compiler 就抓不到了... 05/04 00:19
62F:推 devilkool: 沒想到.equals可以這樣用 受教了 05/04 00:35
63F:推 feeya: 這種寫法很好 我每種語言都習慣這樣做 05/04 00:48
64F:推 ripple0129: equals是一定要這樣用,可以避免null exception 05/04 00:58
65F:推 xpop777: 蠻有趣的觀點,長知識了 05/04 01:31
66F:推 xxtuoo: 防bug但是同事都不習慣 說反正bug那麼多也不差這一個 好像 05/04 02:35
67F:→ xxtuoo: 也有道理...就算了...XDD 05/04 02:35
68F:→ viper9709: 不直覺+1 05/04 03:07
69F:→ Cavalier: 防 bug 的正確方式是寫 test, 不是這種 hack 05/04 03:25
70F:推 yangs0618: 想問寫test是什麼意思 05/04 04:00
71F:推 yyhsiu: test 有寫好,這種錯誤應該是抓得出來的 05/04 04:09
72F:→ Cavalier: 意思就是你不該依賴 compiler 去告訴你 true = x 是錯的 05/04 04:12
73F:→ Cavalier: 而是當你不小心寫了 x = true, unit test 會 fail 05/04 04:13
74F:推 dces4212: @yangs unit test 05/04 05:41
75F:推 bakedgrass: 當你記得要把左右顛倒時,你怎麼還會忘記寫== 05/04 07:41
76F:推 bakedgrass: 寫程式寫一段時間以後,用==甚至===來比較已經很習慣 05/04 07:43
77F:→ bakedgrass: 雖然犯錯很多還很少犯這種錯 05/04 07:44
78F:→ WunoW: 很古老的新手寫法… 已經很久沒看到了 05/04 09:46
79F:→ WunoW: 與其計較這個,不如好好規範變數命名規則 05/04 09:48
80F:→ WunoW: 專案變大會讓人困擾的,這還排不上前10 05/04 09:49
81F:→ angusyu: 以前看過才知道是防 null 但是最後自己還是只能接受一半 05/04 10:41
82F:→ flightheory: 請問我寫C和C#的做法是bool isChecked=(varA==5); i 05/04 10:47
83F:→ flightheory: f isChecked {...}這樣不就兼顧防呆和可讀嗎? 05/04 10:47
84F:推 tommyptt: 搜尋Yoda condition 05/04 11:11
85F:→ gilingking: 我自己是不推薦啦 但如果出錯的確很好抓 不過經驗夠 05/04 11:18
86F:→ gilingking: 之後其實這種錯也很好抓 05/04 11:18
87F:→ rocwild: 如果真的寫錯應該在unit test就發現了吧?我選可讀性 05/04 11:23
88F:推 gugeegee: 這是面試必考題欸 05/04 12:07
89F:→ orz811017: 看久就習慣了 自動兩邊swap... 05/04 12:37
90F:→ testPtt: 一般ide會設定if不能assign 05/04 14:56
91F:噓 attraction: 面試白板題這樣寫 是加分的好嗎 紅明顯 05/04 16:02
92F:推 cuteSquirrel: 防禦性寫法 讓編譯器遇到 True = var 的typo報error 05/04 16:26
93F:→ t64141: 個人也是不推薦這樣的寫法 05/04 16:42
94F:推 IhateOGC: 面試遇過這問題,顯示出公司code品質管理很差 05/04 17:44
95F:→ IhateOGC: 應該是地雷公司才會問 05/04 17:44
96F:推 clarkman: 以前會用這招,後來發現一些compiler或是ckeck coding s 05/04 18:16
97F:→ clarkman: tyle對這些寫法會跳warning, 後來就不寫了 05/04 18:16
98F:推 yyhsiu: attraction 大 方便透露是哪家公司這樣寫可以加分嗎 05/04 19:01
99F:→ wilson6405: 話說防禦性寫法有沒有書籍或資料專門講的啊? 05/04 19:07
100F:推 nova06091: == 05/04 19:58
101F:推 kckckckc: 有規則是可以抓 if條件裡面只用一個=的嗎? 另外也有 05/04 20:56
102F:→ kckckckc: 點好奇是什麼樣的情況下才會真的想要在if條件裡面賦值 05/04 20:56
103F:→ kckckckc: XD? 05/04 20:56
104F:推 bben900911: 不等於0就不進入的那種是可以啦。 05/04 21:01
105F:→ bben900911: 但有CodeReview的話多半會被擋下來吧.... 05/04 21:01
106F:→ bben900911: 說錯,等於0就不進入 05/04 21:01
107F:→ ggBird: 映像中 code complete 有在講 05/04 21:31
108F:推 shortoneal: 不順眼沒錯,但是編譯期就幫你防錯概念很好 05/04 21:43
109F:→ accessdenied: 不以為然的人,似乎都忘了對SQL和VB這些不用==做比 05/04 23:38
110F:→ accessdenied: 對的語言,這種防禦是很有實際價值的 05/04 23:38
111F:推 bibo9901: 重點不是 == 寫成 =, 重點是 = (assign operator) 有回 05/05 00:10
112F:→ bibo9901: 傳值. VB和SQL跟本沒這問題, 有個屁價值? 05/05 00:12
113F:推 KanzakiHAria: 跩成那樣 大概沒寫過其他語言 笑死 05/05 18:16
114F:推 TitanEric: 原來可以防bug 但很不習慣… 05/06 12:11
115F:推 usoko: 我一直以來都無法理解會怕==寫成=的人到底是有什麼問題 05/07 16:03
116F:→ usoko: 我知道有些語言可能沒有夠好的compiler跟IDE幫你擋掉 05/07 16:04
117F:→ usoko: 但高階語言還在用這種寫法就讓人匪夷所思 05/07 16:04
118F:推 Dreamerrr: 同樓上 05/18 01:53







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job 或 站內搜尋

TOP