これが、ブロックが 1 行であっても常に中括弧でブロックを囲むことをお勧めする理由です。これはあなたのコードで、正しくインデントされています:
for (row = 0; row < NUM_DOWN; row++)
for (column = 0; column < NUM_ACROSS; column++) {
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
}
{
System.out.println();
新しい行System.out.println(" ");
を書き込む はfor ループの外側にあるため、最後に一度だけ呼び出されます。
ループは次のように記述します。
for (row = 0; row < NUM_DOWN; row++) {
for (column = 0; column < NUM_ACROSS; column++) {
if (column == 0 || column == NUM_ACROSS) {
System.out.print("*");
} else if (row == 1 || row == NUM_DOWN-1) {
System.out.print("*");
} else {
System.out.print (" ");
}
} // end inner for
System.out.println();
} // end outer for
ブレースについての説明
Java では、for ループまたは if ステートメントに 1 行しかない場合、中括弧を省略しても技術的に問題ありません。したがって、これは次のようになります。
if (column == 0 || column == NUM_ACROSS)
System.out.print("");
ただし、2 行ある場合は、中かっこが必要です。
if(column == 0 || column == NUM_ACROSS) {
System.out.print("");
doSomething();
}
if-else if-else ツリーは、for ループ内の 1 つの「行」としてカウントされるため、中括弧は技術的には必要ありません。これは有効です:
for (column = 0; column < NUM_ACROSS; column++)
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
同様に、for ループ全体が、外側の for ループ内の 1 行としてカウントされます。
for (row = 0; row < NUM_DOWN; row++)
for (column = 0; column < NUM_ACROSS; column++)
if (column == 0 || column == NUM_ACROSS)
System.out.print("*");
else if (row == 1 || row == NUM_DOWN-1)
System.out.print("*");
else
System.out.print (" ");
// this line is inside of neither for-loop because of the lack of braces:
System.out.println();
一般に、レベルや能力に関係なく、すべてのプログラマーにとって、コード ブロックを中かっこで囲んで構文のあいまいさを避けることをお勧めします。複数のプログラマーがいる場合や、コードのインデントが悪い場合は、このように中括弧を省略すると危険になる可能性があります。元の投稿のコードを考えてみてください。何がどこにネストされているか、またはどのループに含まれているかが一目でわかりますか?
中括弧の欠如が意図しない結果をもたらす可能性がある別の例。日が 15 未満の場合は「前半」、月が 11 の場合は「11 月」を出力する必要がある状況を考えてみましょう。次のコード
if ( day < 6 )
System.out.println("First half.");
if ( month == 11 )
System.out.println("November.");
プロジェクトの要件が変更され、1 日が 15 日未満の場合は「前半」を印刷する必要がなくなったとします。役に立つインターンがやって来て、その行をコメントアウトします。
if ( day < 15 )
// System.out.println("First half.");
if ( month == 11 )
System.out.println("November.");
これでよろしいですか?いいえ!上記のコードは意味的にこれと同等であるため、11 月のケースも壊れました。
if (day < 15)
if (month == 11)
System.out.println("November.");
ずっと中かっこを使用していた場合は、問題ありません。
if (day < 15) {
// System.out.println("First half.");
}
if (month == 11) {
System.out.println("November.");
}
これがベスト プラクティスである理由については、間違いなく他にも 6 つ以上の理由と例があります。中括弧を常に使用する習慣を身につけることは、たとえそれが時々余分な文字をいくつか入力することを意味するとしても、間違いなく、コードを期待どおりに機能させ続け、遭遇する可能性のあるコンパイルやその他のエラーの数を減らすのに役立ちます.