Ubiux;
スティーブンC:
Javaの文法は、後者を禁止しているため。関連する文法規則は以下のとおりです。
BasicForStatement:
for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement
Statement:
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementWithoutTrailingSubstatement:
Block
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
上記の含まれていないことに注意LocalVariableDeclarationStatement
。
あなたにはJavaのための完全な構文文法を見つけることができますJLS第19章。
あなたのための仮想的な質問です。次のコードは、有効なJavaであると仮定すると:
for (int i = 1; i < limit; i++)
Movie movie = randomMovie();
System.out.println("The last movie is " + movie);
範囲何かmovie
変数は?
答えは範囲すぐに外に出なければならないということである1。それ作る無用宣言、および用法でのprintln
呼び出しがコンパイルエラーです。
私は信じて、これは、彼らがこれを許可しないようにJava構文を指定している理由であること。宣言は無用で、最も可能性の高い間違い、およびコンパイルエラーを経由してプログラマの注意を喚起しなければなりません。
(同じ引数で宣言で
for (int i = 1; i < 11; i++){
Movie movie = randomMovie();
}
また、間違いです。しかし、言語の文法でこれについて何かを行うことは難しいでしょう。)
1 -代替は批判に耐えられるではありません。Javaのような静的チェックした言語では、スコープ内の変数だけ早く実行パスに応じて、存在している状況を持つことはできません。これは、の値が考えmovie
ている場合もlimit
ゼロでしたか?