[请益] 比较值放左边 变量放右边

楼主: k300plus (300plus)   2019-05-03 16:15:04
Hi 软工板 All,
最近看到一种coding style如
if (True == var1)
就是比较的值放在左边,变量放在右边
一直觉得不太习惯
过往写程式都是变量放左边
想问各位大大这是有什么好处
是跟lvalue, rvalue有关吗 ?
还是其实根本没差就是一种coding习惯而已 ?
想请各位解惑,谢谢
作者: WorkForFree (---)   2019-05-03 16:17:00
怕==写成=而已
作者: AudiA4Avant (A4 Avant)   2019-05-03 16:18:00
可以避免一些crash的情况
楼主: 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:00
yoda 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 反过来就会了
作者: shooter555 (shooter)   2019-05-03 16:50:00
原来有这种防呆的方式0.0 但觉得好不顺眼
作者: DCTmaybe (竹竹人)   2019-05-03 16:56:00
好不顺眼啊..头痛
作者: sherees (ShaunTheSheep)   2019-05-03 16:56:00
yoda?
作者: hidog (.....)   2019-05-03 16:59:00
我是比较喜欢判断式里面不要塞等号啦XD
作者: deray (Deray)   2019-05-03 17:08:00
作者: crossdunk (推嘘自如)   2019-05-03 17:22:00
我还看过等于放左右两边的咧=OO=
作者: yamakazi (大安吴彦祖)   2019-05-03 19:27:00
coverity这种静态分析工具应该可以抓出来if(a=b)
作者: rhythm7321 (rhythm7321)   2019-05-03 19:27:00
都出来工作了 怎么还会 == 写成 =
作者: 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 内才对 打错抱歉
作者: mithuang (阿明)   2019-05-03 20:33:00
很不直觉,第一次看觉得傻眼
作者: hidog (.....)   2019-05-03 20:44:00
if( a == 0 ) 不要用 if(a) 这是可以解决的看个人习惯囉这种写作习惯没对错 没bug 就好
作者: sourbait (sourbait)   2019-05-03 20:54:00
我都写 = =
作者: twilighthook (噜嘟)   2019-05-03 21:04:00
用.equals()会放左边
作者: Darkword1987 (黑字)   2019-05-03 21:21:00
equals 常数放左边避免null
作者: 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
依照公司规定
作者: ChungLi5566 (中坜56哥)   2019-05-03 21:32:00
要习惯用.equals() 不然哪天手残把Object拿来比
作者: LinuxKernel (Linus Torvalds)   2019-05-03 21:40:00
等你哪天发现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
感觉很糟糕的写法
作者: clamperni (肥宅牛牛)   2019-05-03 23:40: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 就抓不到了...
作者: devilkool (对猫毛过敏的猫控)   2019-05-04 00:35:00
没想到.equals可以这样用 受教了
作者: feeya (24 August 升格为乡民)   2019-05-04 00:48:00
这种写法很好 我每种语言都习惯这样做
作者: ripple0129 (perry tsai)   2019-05-04 00:58:00
equals是一定要这样用,可以避免null exception
作者: xpop777 (Archie)   2019-05-04 01:31:00
蛮有趣的观点,长知识了
作者: xxtuoo (浪费时间不好QQ)   2019-05-04 02:35:00
防bug但是同事都不习惯 说反正bug那么多也不差这一个 好像也有道理...就算了...XDD
作者: viper9709 (阿达)   2019-05-04 03:07:00
不直觉+1
作者: Cavalier (Cavalier)   2019-05-04 03:25:00
防 bug 的正确方式是写 test, 不是这种 hack
作者: yangs0618 (阿彰)   2019-05-04 04:00:00
想问写test是什么意思
作者: yyhsiu (hsiu)   2019-05-04 04:09:00
test 有写好,这种错误应该是抓得出来的
作者: 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
作者: bakedgrass (蒙古烤小草)   2019-05-04 07:41:00
当你记得要把左右颠倒时,你怎么还会忘记写==写程式写一段时间以后,用==甚至===来比较已经很习惯虽然犯错很多还很少犯这种错
作者: WunoW (WunoW)   2019-05-04 09:46:00
很古老的新手写法… 已经很久没看到了与其计较这个,不如好好规范变量命名规则专案变大会让人困扰的,这还排不上前10
作者: angusyu (〒△〒)   2019-05-04 10:41:00
以前看过才知道是防 null 但是最后自己还是只能接受一半
作者: flightheory (飞行原理)   2019-05-04 10:47:00
请问我写C和C#的做法是bool isChecked=(varA==5); if isChecked {...}这样不就兼顾防呆和可读吗?
作者: tommyptt (Alga)   2019-05-04 11:11:00
搜寻Yoda condition
作者: gilingking (精灵游侠)   2019-05-04 11:18:00
我自己是不推荐啦 但如果出错的确很好抓 不过经验够之后其实这种错也很好抓
作者: rocwild (外国死小孩)   2019-05-04 11:23:00
如果真的写错应该在unit test就发现了吧?我选可读性
作者: gugeegee (咕鸡鸡)   2019-05-04 12:07:00
这是面试必考题欸
作者: orz811017 (orz811017)   2019-05-04 12:37:00
看久就习惯了 自动两边swap...
作者: testPtt (测试)   2019-05-04 14:56:00
一般ide会设定if不能assign
作者: attraction (美安诚信经销伙伴)   2019-05-04 16:02:00
面试白板题这样写 是加分的好吗 红明显
作者: cuteSquirrel (松鼠)   2019-05-04 16:26:00
防御性写法 让编译器遇到 True = var 的typo报error
作者: t64141 (榕树)   2019-05-04 16:42:00
个人也是不推荐这样的写法
作者: IhateOGC (我讨厌)   2019-05-04 17:44:00
面试遇过这问题,显示出公司code品质管理很差应该是地雷公司才会问
作者: clarkman (凉雨)   2019-05-04 18:16:00
以前会用这招,后来发现一些compiler或是ckeck coding style对这些写法会跳warning, 后来就不写了
作者: yyhsiu (hsiu)   2019-05-04 19:01:00
attraction 大 方便透露是哪家公司这样写可以加分吗
作者: wilson6405 (KickAsson)   2019-05-04 19:07:00
话说防御性写法有没有书籍或资料专门讲的啊?
作者: nova06091   2019-05-04 19:58:00
==
作者: kckckckc (KC)   2019-05-04 20:56:00
有规则是可以抓 if条件里面只用一个=的吗? 另外也有点好奇是什么样的情况下才会真的想要在if条件里面赋值XD?
作者: bben900911 (Ben)   2019-05-04 21:01:00
不等于0就不进入的那种是可以啦。但有CodeReview的话多半会被挡下来吧....说错,等于0就不进入
作者: ggBird (ggBird)   2019-05-04 21:31:00
映像中 code complete 有在讲
作者: shortoneal (不告诉你咧)   2019-05-04 21:43:00
不顺眼没错,但是编译期就帮你防错概念很好
作者: accessdenied (存取违规)   2019-05-04 23:38:00
不以为然的人,似乎都忘了对SQL和VB这些不用==做比对的语言,这种防御是很有实际价值的
作者: bibo9901 (function(){})()   2019-05-05 00:10:00
重点不是 == 写成 =, 重点是 = (assign operator) 有回传值. VB和SQL跟本没这问题, 有个屁价值?
作者: KanzakiHAria (神崎・H・アリア)   2019-05-05 18:16:00
跩成那样 大概没写过其他语言 笑死
作者: TitanEric (泰坦)   2019-05-06 12:11:00
原来可以防bug 但很不习惯…
作者: usoko (time to face reality)   2019-05-07 16:03:00
我一直以来都无法理解会怕==写成=的人到底是有什么问题我知道有些语言可能没有够好的compiler跟IDE帮你挡掉但高阶语言还在用这种写法就让人匪夷所思
作者: Dreamerrr (芋鸭芋鸭欧)   2019-05-18 01:53:00
同楼上

Links booklink

Contact Us: admin [ a t ] ucptt.com