基本上称号。通过Java BNF看,我看到“没有捷径,如果”如:
<statement no short if> ::= <statement without trailing substatement> | <labeled statement no short if> | <if then else statement no short if> | <while statement no short if> | <for statement no short if>
这是什么“没有捷径,如果”是什么意思?我看“NoShortIf”弹出我的演讲稿,没有什么意思的解释。
答案是在由@Andy特纳注释上面提供的链接:
声明因此语法分为两类:一类是那些可能在没有其他条款(“短if语句”)if语句结束,那些绝对没有。
只有绝对不会在短时间内结束,如果语句可能出现在确实有else子句的if语句其他关键字之前,立即子语句的语句。
这个简单的规则阻止了“晃来晃去别人”的问题。声明与“无短,如果”限购是相同的同类语句的执行行为的执行行为没有“不短,如果”限购;区别纯粹是拉来解决语法难度。
“短,如果”是没有其他的if语句。
“短IFS”不是在某些情况下允许消除歧义。
以下是有效的Java。有没有“短IFS”,没有歧义。
boolean flag = false;
if (x > 0)
if (x > 10)
flag = true;
else
flag = false;
else
flag = true;
以下也是有效的Java代码,但没有“短,如果”规则存在模糊性,如果其他所属。
if (x > 0) if (x < 10) flag = true; else flag = false;
下面的Java语言规则
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
意味着,上面的代码的含义是
if (x > 0)
if (x < 10)
flag = true;
else
flag = false;
也就是说,其他人属于内部的if语句。
让我们在Java测试,以确保
static Boolean shorty (int x) {
Boolean flag = null;
if (x > 0) if (x < 10) flag = true; else flag = false;
return flag;
}
public static void main(String[] args) {
System.out.println(shorty(-1));
System.out.println(shorty(5));
System.out.println(shorty(20));
}
输出是
null
true
false