比较操作中两种语法的差异:为何将常量放左侧?
为什么有人把常量放在比较运算符左边?
这种写法叫「尤达条件」(Yoda Conditions),不是单纯的个人偏好,核心目的是避免把比较运算符==误写成赋值运算符=的低级错误。
举个最典型的例子:
如果你不小心把if(session == null)写成了if(session = null),在很多编程语言(比如C/C++)里,这是合法代码——它会把null赋值给session,然后判断这个赋值操作的结果(也就是null),导致逻辑完全跑偏,而且编译器不会报错,很难排查。
但如果写成if(null == session),不小心误写成if(null = session)时,编译器会直接报错,因为你不能给常量null赋值,这样就能在编译阶段就发现这个笔误,避免后续的bug。
再看字符串比较的例子,如果你把if(someStringVar != "")误写成if(someStringVar = ""),在支持赋值表达式作为条件的语言里,会把空字符串赋值给变量,然后用这个值作为判断条件,引发异常逻辑;但换成if("" != someStringVar)后,误写成if("" = someStringVar)会直接触发编译错误,提前拦截问题。
当然,现在很多现代IDE会对if(var = value)这种写法给出警告,但这种尤达条件的写法,是早年没有这类工具时程序员总结出来的防御性编程技巧,直到现在还有人在用。
内容的提问来源于stack exchange,提问作者user1960836
相关产品推荐
相关产品推荐

