書は、このように文法的に2つのカテゴリに分類されています。
それは、文がStatementNoShortIfと声明に分かれていることを意味します。どちらのステートメントが "短いifステートメント"とStatementNoShortIfで表示されないことができます。
短いif文は、else節のないif文です。文はelse節を持たないif文のキーワードelseの直前のサブステートメントとして表示されることがあれば、間違いなく短期で終わっていない
IfThenStatement: // short if statement
if (Expression) Statement
IfThenElseStatement: // not short if statement
if (Expression) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf: // not short if statement
if (Expression) StatementNoShortIf else StatementNoShortIf
文だけ。
のみStatementNoShortIfがあれば非短い文でif
とelse
間に入れることができます。
そして、このようなStatementNoShortIfはそのif else
文の即時サブステートメントでなければなりません。
この単純なルールは、「dangling else」問題を防止します。 「短い場合」の制限があるステートメントの実行動作は、「短くない場合」の制限がない同じ種類のステートメントの実行動作と同じです。その区別は純粋に構文上の困難を解決するために引き出される。
したがって、このようなダングリング他の問題のサンプル考える:else
は最初if
の一部にすることはできません
if (door.isOpen())
if (resident.isVisible())
resident.greet("Hello!");
else door.bell.ring(); // A "dangling else"
を。もしそうならStatementNoShortIfは常にelse
を必要とするため
、即時サブステートメントルールに従って、ライン2-3はStatementNoShortIfの文である必要がありますが、それは実際にIfThenStatemtn(if文短い)であります。したがって、elseは2番目のifの一部でなければならず、したがって、他の問題が解決されます。
あなたは本当に前の行を追加するべきです: "CやC++や多くのプログラミング言語のようなJavaプログラミング言語は、else節がおそらくそれに属している可能性のあるifに属することを任意に宣言します。 " –
@ NathanHughesはい、質問は文脈なしで少しばかり読まれます。それを提供していただきありがとうございます。 –