最近看到公司的代码总是这样写,if(32<number){......},为什么大于一个数要反过来写,不解.
以前的代码中见过这种类似的写法,看看下面的写法
[code="java"]
// 这个在java早期的版本的编译是通过的
if (a = null) {
}
// 这个在java早期的版本的编译不通过
if (null = a) {
}
// 为了更容易发现错误,就使用第2种写法,让它编译不过,有了下面的写法
if (null == a) {
}
[/code]
以前的开发人长期使用这种风格,不管判断null,还是数字都把常量放在前,变量放在后面了,成了一个习惯。。。。
[quote]最近看到公司的代码总是这样写,if(32<number){......},为什么大于一个数要反过来写,不解. [/quote]
这个确实没有必要反过来写。
反写的有这样的:
String n = "abcde";
if ("abcde".equals(n))
{
System.out.println("equals...");
}
n = null;
if ("abcde".equals(n))
{
System.out.println("equals 2 ...");
}
把变量放到equals的参数当中,即算该变量值为null,也不会抛异常。
[quote]最近看到公司的代码总是这样写,if(32<number){......},为什么大于一个数要反过来写,不解.[/quote]
我说一下我的理解:前一阵子做一个C++的项目,在项目组我也遇到了类似的情况,项目经理给我用下面类似的代码解释的,比如
[code="C++"]
if(number == 32){...}
[/code]
if语句用来判断变量值是否等于32,程序员如果在敲代码的时候少了一个等号,代码就会变成
[code="C++"]
if(number = 32){...}
[/code]
由于赋值操作在C/C++中是一个表达式,是返回值的,所以上面代码if语句是永远执行的,所以这种错误即使犯了也很难查出来,因为编译器是不报错的,所以建议写成
[code="C++"]
if(32 == number){...}
[/code]
少了一个等号编译器会立马报错的
在Java中赋值操作是不返回值的
[code="C++"]
if(number = 32){...}
[/code]
会报错的。
你们公司的Java风格更像C/C++的风格,我猜可能他们以前用C/C++习惯了,在Java中两种写法都没有潜藏的副作用,哪个都行。但是不管什么语言,都要使用"让编译器尽可能告诉你有意无意的错误"的代码风格,这样能及时把错误找出来
:cry: 不好意思,最后一段代码应该是Java代码
[code="java"]
if(number = 32){...}
[/code]
统一的风格有助于团队沟通与代码view.就好比餐厅的服务员都穿同样的衣服一样.