今天无意间看到别人写的这么一句,我就晕了...
return selforder <= order ? selforder != order ? -1 : 0 : 1;
返回的是个int类型
我知道三目可以连着写,是从右往左运算的,但这个...咋看都不像三目.
呵呵.谁来说明下?
return selforder <= order ? selforder != order ? -1 : 0 : 1;
返回的是个int类型
我知道三目可以连着写,是从右往左运算的,但这个...咋看都不像三目.
呵呵.谁来说明下?
这样应该就清楚了
最恨这样写代码的
加个括号会死么?
读的时候难读的要命
要我看到项目中有人这样写代码,直接往死里骂
汗 这个刚研究过...
1 ?: 条件运算符,右结合性
2 一元运算符左结合性的有[].()(method call) .中间那个.都知道是对成员的引用.这是最高优先级的三个
所以有这样的代码 boolean b=Pattern.compile(".*?\\d{3}").matcher("whose your daddy?123").matches();
大家都清楚怎么回事.
2 一元运算符右结合性 ! ~ ++ -- +(单目) -(单目) ()(cast) new 这是第二高优先级的8个
1)想一想内部类的 A a=new A(); A.B ab=a.new B();
2)再想一想 Object b=new Integer(4);
int j= -(int)(Integer)(Number)b;
大家也都清楚是什么意思
3 再看楼主这个 selforder <= order ? selforder != order ? -1 : 0 : 1;
加上括号后是(selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
1)为什么这么加括号,我们根据关系运算符大于条件运算符,2)条件运算是右结合的
3)注意虽然是右结合的但是 算起来却是从左往右算的.所以就容易理解了.
相当于 if(selforder<=order){
if(selforder!=order)
return -1;
else retern 0;
}
else
return 1;
4 既然是右结合性,为什么从左往右算?
1)您从右往左能算得了吗?
2)条件运算符本身就是像a>b?1:0 一样从左往右算的
3)类比
int a=2;
int d=4;
int c=a+++--d;
System.out.println(c);
加上括号后是(selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
1)为什么这么加括号,我们根据关系运算符大于条件运算符,2)条件运算是右结合的
3)注意虽然是右结合的但是 算起来却是从左往右算的.所以就容易理解了.
相当于 if(selforder<=order){
if(selforder!=order)
return -1;
else retern 0;
}
else
return 1;
-------------------
够通俗了
很多框架的源码都是这样的,这样写好比if else更快。会写这个代码的人代码也写到一定的程度
和这个差不多的帖子,右结合和从又开始算不是一回事
不过要加括号
加了括号后的可读性并不比一堆的if else更难读!
相当于 if(selforder <= order) {
if(selforder != order)
return -1;
else
return 0
} else {
return 1;
}
这个很好理解啊,就像34楼说的那样理解就行了。
D:\javaplugin\apache-log4j-1.2.16\apache-log4j-1.2.16\src\main\java\org\apache\log4j\xml\DOMConfigurator.java(338): Logger logger = (catFactory == null) ? repository.getLogger(loggerName)
D:\javaplugin\apache-log4j-1.2.16\apache-log4j-1.2.16\src\main\java\org\apache\log4j\xml\DOMConfigurator.java(402): cat = (catFactory == null) ? repository.getLogger(catName) : repository.getLogger(catName, catFactory);
找到 '?' 2 次。
selforder = order return 0
selforder > order return 1
return selforder <= (order ? (selforder != order ? -1 : 0 ): 1);
Return IIf(selforder <= order, IIf(Not selforder = order, -1, 0), 1)
VB.NET表示木有鸭梨
return ( (selforder <= order )? ((selforder != order )? -1 : 0 ): 1);对吧
嵌套不加括号,维护很困难啊!
应该这样吧?
if(selforder != order)
return -1;
else
return 0;
else
return 1;
r文件