Soft_Job 板


LINE

Hi 软工板 All, 最近看到一种coding style如 if (True == var1) 就是比较的值放在左边,变数放在右边 一直觉得不太习惯 过往写程式都是变数放左边 想问各位大大这是有什麽好处 是跟lvalue, rvalue有关吗 ? 还是其实根本没差就是一种coding习惯而已 ? 想请各位解惑,谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.185.98
※ 文章网址: https://webptt.com/cn.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灯, 水草

请输入看板名称,例如:BuyTogether 或 站内搜寻

TOP