1
daguaochengtang 2019-10-11 10:59:48 +08:00
没看懂你说的什么意思
|
2
ClericPy 2019-10-11 11:00:45 +08:00
听说是 Clang 的遗留梗
|
3
zhs227 2019-10-11 11:02:13 +08:00 7
怕你把==写成=号了,这种错误判断不出来。如果把常量写在前面就不存在问题。
例:a ==3 写成 a =3 对比: 3 == a 写成了 3=a if (a=3) { dosomething();} 上面的语句在很多语言里是真值。 |
4
shintendo 2019-10-11 11:03:08 +08:00
通常的解释是:前面的写法当你不小心把==写成=的时候能直接报错
虽然我觉得挺扯的…… |
5
saeed 2019-10-11 11:03:12 +08:00
防止 少写 个等号 成了赋值吧
|
6
littleylv 2019-10-11 11:03:34 +08:00
3 楼是正解,结贴。
|
7
HENQIGUAI 2019-10-11 11:13:30 +08:00
默认 java;
直接比较这玩意的顺序主要看个人习惯; 不像是 varible.equals("aaa"); 和 "aaa".equals(varible); 这种推荐字面量在前是因为你变量值有可能为 null , 再去调用方法就会 NPE 了; 另外,StringUtils 不香吗 |
8
lyh404 2019-10-11 11:20:11 +08:00 1
以前写 C 时,部门编程规范强制要求一定要把值写在左边,就是为了防止少写等号出问题。
|
9
zek 2019-10-11 11:36:39 +08:00 via iPhone
Java 是为了避免空指针异常
|
10
Mithril 2019-10-11 11:48:54 +08:00
最开始的时候是 C 语言推荐这么做,记得最早是 C 专家编程或者 C 陷阱与缺陷书里写的。
这两本书都非常老了,上古时代的 C 编译器无法在你把条件语句写成赋值语句时给出警告。但是如果你这么倒着写,赋值语句就会直接出错。 但现在几乎所有编译器都可以在这种情况下给出警告,这么写已经没什么用了。而且如果代码一部分这么写,一部分正着写,看起来就很怪,还不如全正着写。 |
11
szandy6 2019-10-11 11:51:23 +08:00
主要看语言,如果是 js 为了防出错可以把 null 写前面,java 或 C#我觉得没必要,因为判断条件写成赋值编译时就报错了,obj==null 这样读起来更顺,更符合直觉。
|
12
lagoon 2019-10-11 12:00:16 +08:00
其实有点讨厌这种提倡。
因为老的语言有这种习惯,就强迫新的语言,明明没有必要还那么写。 类似的情况还有很多。 算不算老码农的霸权主义? |
13
passerbytiny 2019-10-11 12:03:19 +08:00
因为这种推荐写法出来的时候 Java 还不流行,Java 流行后无脑跟风的又太多。
if (obj = null) 等效于 if (null),null = obj 在哪个语言都会报错(编译错误或运行错误)。在 Java 出现之前,不管是强类型的 C、C++,还是其他弱类型的语言,if (null) 又等效于 if (false) 。以及必须说明的是,那时候还盛行“记事本编码”。if (obj == null) 一个不小心就变成了 if (false),还特别难定位。if (null == obj) 虽然也会一不小心,但它变成的是编译错误(或者运行错误),非常容易定位。 于是 null == obj 就变成了推荐(或者强制)的编码规范。 Java 对此进行了简化,if (null) 直接报错,如果编译时就能确定则还报成编译错误,而 Java 之后的其它语言和 hint 工具,大多都加入了 if(obj = null)的检测,因此目前该项规范已经不适用,应当让位于可读性,还是要写成 if (obj == null)。 |
14
marvinyyf 2019-10-11 12:19:38 +08:00
我们 java 没这个要求,jni 有要求 NULL 写前面
|
15
bumz 2019-10-11 12:28:00 +08:00 via iPhone
现代编译器都会检查
真想 if (a = 0) 得写成 if ((a = 0)) 才不会警告⚠️ 此外这个规范没啥意义 if (a = b) 就查不出来 |
16
taotaodaddy 2019-10-11 12:33:37 +08:00 via Android
就是三楼说的,结帖
|
17
NoKey 2019-10-11 12:39:32 +08:00
以前某些语言的 ide 或者编译器之类的,不检查 a=null 在条件语句中的问题
现在很多语言的 ide 或者编译器支持了 所以现在有些人会觉得很奇怪 |
18
autoxbc 2019-10-11 13:04:58 +08:00
尤达表达式,已被废弃
容易写错的表达式总有办法避免写错 不合语义的表达式永远都不合语义 |
19
starcraft 2019-10-11 13:31:27 +08:00
确实应该算 java 发扬的,开源大项目全是这样的写法。
|
20
mxalbert1996 2019-10-11 14:08:13 +08:00 via Android
反正我是 == 写习惯了反而写 SQL 的时候有时会写写错
|
21
eGlhb2Jhb2Jhbw 2019-10-11 14:57:43 +08:00
谁给你推荐这种写法你去问谁呗,看他能给你说出来个 123 不
|
22
yicong135 2019-10-11 15:22:57 +08:00
这应该是 c/c++ 里面比较推荐用法
|
23
zpm683 2019-10-11 16:26:39 +08:00
避免空指针异常+1
大项目是这样的。 |
24
ultimate 2019-10-11 16:33:29 +08:00
三楼是正解,刚学 C 语言的时候,==会写成=,程序不报错,但逻辑不对啊。
PS.听说是 Pascal 的遗留梗 |