前端不要使用尤达表达式
前端代码里对于逻辑判断是常量在前还是变量在前,个人一直没有定论。没有定论的结果就是没有标准,没有标准的结果就是程序代码中两种风格并存,个人觉得很不爽。于是就在网上搜索资料,偶然发现有个说法叫
尤达表达式
,似乎答案就在这块,于是就有了下文。
尤达表达式?
尤达表达式是计算机编程中的一种风格,其中表达式的两个部分与条件语句中的典型顺序相反。这种风格的命名,来源于星球大战的一个角色,绝地大师尤达(Yoda)。剧中,该角色喜欢以颠倒的语序说英语。比如“当九百岁你活到,看起来很好你将不”。
例子
1 |
|
恍然大悟,原来这就是尤达表达式。
尤达表达式的优缺点分析
优点
表面出现意外的赋值,但不被发现
比如在逻辑判断中,我们误将===写成了=,假如是
value=1
,并不会报错,但如果是1=value
,错误直接就会被发现解决不安全的null类型操作
java
缺点
- 易读性降低
结论
优点1,个人觉得虽然变量在前会遮蔽了错误,但是这个错误,其实可以通过其它方式lint的其它规则,哪怕是code review进行避免。而优点2,比如在Java中可以体现,在JS里,实际上变量在左边还是右边,都无法避免这个空类型错误。对于缺点很明显。
尤达表达式的缺点足以盖住其优点,所以个人建议,前端不使用尤达表达式
lint
有了结论,那么就需要想办法去推进规范的写法。为了控制前端代码风格,一般我们都会加入lint,而尤达这个写法也是有对应的lint,so我们可以以此来控制逻辑判断上的代码风格。
ESLint中
1 | "yoda":"never" |
相关说明,戳这里
TSLint中
1 | "binary-expression-operand-order": true |
相关说明,戳这里
写在最后
- 似乎一个逻辑判断如何写,只要不错就不重要?No,即使是上述的尤达表达式,这么个细节,实际上背后也是优秀程序员对于编程风格的思考,而我们也需要多思考。
- 因为对于逻辑判断写法的追求,才引导了我了解到尤达表达式,so,
讲究细节,从来不是多余