コメントと文の構造のコードトレース
ソースは行数ではなく、文・ブロック・コメントの区切りに従って読みます。セミコロンと中括弧の役割を押さえ、コメントで無効になる範囲と実際に動く文を区別します。
この単元で学ぶこと
- 行コメントと範囲コメントを区別する
- 文とブロックの範囲から出力を追う
- 空文や区切りの不足による結果を判断する
本文解説
コメントを除いて実行文を並べる int n=1;の後に/* n+=10; */n+=2;とあれば、実行する更新は+2だけです。コメントを読み飛ばした後に残る文を順に列挙すると、説明用のコードを誤って計算へ入れることを防げます。
行コメントは改行で終わる int n=1; // n+=10;という行の次にn+=2;があるなら、次の代入は実行します。複数行を無効化したいときは各行へ//を付けるか、入れ子の問題に注意して範囲コメントを使います。
文字列の空白と改行 文の途中を通常の空白や改行で区切っても、字句の境界が保たれれば結果は変わりません。しかし"A B"の空白はデータなので出力へ現れます。また通常の文字列リテラルにソース上の改行を直接入れることはJava 11ではできません。
ブロックのない二段階更新 int n=0;if(false)n++;n+=2;の結果は2です。最初の更新だけが条件の対象です。{n++;n+=2;}とまとめれば、二つとも条件falseで省略され結果0になります。字下げだけではこの差を作れません。
forの空文を見分ける int n=0;for(int i=0;i<3;i++);{n++;}ではforが空文を3回実行し、後の独立したブロックでnを1回増やします。for文の直後のセミコロンをなくしてブロックを本体にすれば、nは3になります。
閉じ記号と余った記号 /* A /* B */ C */という並びでは最初の*/でコメントが終わり、C */がコードとして残ります。外側コメントの閉じ記号として自動解釈されません。コンパイルエラーになった位置だけでなく、コメント開始から終了までを確認します。
メソッド呼出し文と単なる式 System.out.print(3);はメソッド呼出し文ですが、1+2;は任意の式を文として置けないため不正です。Javaでは代入や増減やメソッド呼出しなど、式文にできる形が定められています。式の値を見たいときはprintの引数に入れます。
ブロックからの到達可能性 return;の直後に同じブロックでprintを書くと、その文には到達できずコンパイルエラーです。コメントでreturnを無効化した場合は別です。単に実行結果が空かどうかではなく、コードとして成立するかを先に判定します。
図解
重要ポイント
- //は行末まで、/* */は閉じ記号までコメントにする。
- コメントは文字列の内部では通常の文字。
- セミコロンが文を終え、改行だけでは代わりにならない。
- ifやforの後の空文を見落とさない。
間違えやすい点
- ブロックコメントを入れ子にしない。
- 字下げだけで条件の範囲を判断しない。
- ifの後へ不用意にセミコロンを置かない。
用語解説
- 文
- 代入やメソッド呼出し等、実行する処理の構文単位。
- ブロック
- 中括弧で囲んだ文や宣言のまとまり。
- 空文
- セミコロンだけからなり何もしない文。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。