我看到许多第三方代码片段在某些情况下使用null==instance
而不是if(null== connection)
等instance==null
。
只是好奇,这种方法对条件语句有什么影响吗?或者人们只是很酷地使用它?
我听到的使用这个的最常见的原因是:
- 这是聪明和酷。
- 它有助于防止分配和比较错误,因为你不能分配给
null
。
我强烈反对前者,因为"聪明"在任何代码库中都很容易变得"难以维护"。后者是有效的,尽管我认为体面的测试覆盖可以用更多的附加价值完成相同的任务。
我个人不喜欢这种风格,因为它不适合我阅读。一般来说,我喜欢让代码"读起来像散文一样",以便易于理解。考虑两个散文语句:
- 对象为空
- 对象为空。
不,没有任何区别。
这只是一个代码风格,在某些情况下可能对某些人有用,当null
立即表现为条件语句中的第一个值时,使其更显式
还要想象一下,如果"instance"出现的不仅仅是一个类型的实例,而是某个表达式,比如(()=> { .... })
。在这种情况下,你需要先把一个表达式读到最后,在看到什么是条件之后,你首先看到的是条件。
我认为它来自于C/c++,在那里你可能不小心赋值而编译器不会注意到:
if(variable = 0) { ... }
这不会导致错误,条件始终为false,变量赋值为0。于是人们开始严格使用另一种形式:
if(0 = variable) { ... }
导致错误,因为0不能赋值。
符号if(null == variable)
可能足够可读,但是if(b == a)
呢,其中b是常量, a是变量?在这种情况下,可读性是一个问题。
没有区别,除非您输入错误并执行=
而不是==
,编译器会报错,因为您无法分配给null