楼主:
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帮你挡掉但高阶语言还在用这种写法就让人匪夷所思