终于知道在比较时为何要把值放在变量前面了

之前看程序的代码,总是发现他们在做if判定时,往往习惯把常量放在比较符号前面,把变量放在后面.例如if(null != myVariables).

从直觉上讲,这种写法是有些别扭的,但这种有些别扭却又十分刻意的处理,总是让人忍不住去思考其原因.之前一直没想明白,以为这可能是某种可以提高运算效率的技巧.
~~比如判断myFunc()==null,肯能就要先算出myFunc的值再和null比较,而把null写前面,就不用计算myFunc()了.~~

当然,事实并非如此.试做试验:

可见并非如我所想的那样,但当时我猜测这可能涉及到更底层的效率问题,也就没多细究.
今天在公司看到一段lua代码里有大概这么一段:

感觉很有意思,在lua这种动态语言里,用这种方式确保_myBool的类型是bool.
如果让我写的话,我可能会在比较之前给_myBool赋个bool值,不过这其实是一种静态语言的思想,写在动态语言里就太不酷了.

正是今天的这个发现,让我又回想起来了之前一直未能解惑的null==myVariables写法的意义.今晚终于认真地搜索了一下,结果其实有点失望,原来这么做仅仅是为了避免产生编译器无法查出的错误:

在C等一些语言中,if() 或者 while() 中没有硬性的规定必须是一个bool类型.
即使把if(a == null)不小心写成if(a = null),也是可以编译通过的.
因此为了避免发生这种错误,需要养成用if(null == a)这种写法的习惯.

像我之前那样单在C#语境下写代码,根本想不到原来是因为这个嘛……
不过考虑到自己之后会更多地去写些动态语言,或者未来会用到C等老派语言,顺手养成这个习惯,也没有坏处.
说实话,我确实也觉得这种写法挺酷的,就好像传统语言的一些语言习惯会和当地人的生活或是某段历史息息相关,编程语言的特殊习惯则是以这样的原因诞生的.

这就是编程语言,或者是极客文化的魅力吧.

发表评论

电子邮件地址不会被公开。 必填项已用*标注