for文で、複数のカウンタを操作しながら繰り返しを行う場合、「for(int i = 0, j = 0; i < 9; i++, j++)」というように、両方を第3項(反復式)に記入したほうが見やすくなる場合があります。しかし、この時、反復式に他の変数や定数を用いる場合は注意が必要です。例えば、下記のような2つの変数を増加させる繰り返しを行うプログラムがあるとします。
この繰り返しの最後にある変数jの操作を、前述の理由でfor文の第3項に移したところ、なんと、違う結果になってしまいました。
実はインタフェースのおかげでエラーにならなかっただけ
この違いが発生した原因は、定数「CNTUP」にあります。実は、このクラスが実装しているインタフェースに同じ名前の定数が定義されていたので、変更後には、ローカルの定数「CNTUP」が無視されてしまったのです。
よって、もし、このインタフェースが実装されてなければ、変数jの操作をfor文の第3項に移した段階でコンパイルエラーになるはずでした。
この現象からも、for文の第3項はそれより前に定義済みの変数や定数しか使えないことがわかります。正確には、同じfor文の第1項(初期化部)までに定義されているかどうかがチェックされます。
for文の第3項は、実際に実行されるタイミングがforブロックの内容の後ですので、forブロックの内部で定義された変数や定数を利用できそうに見えますが、そうではありません。この例のようにコンパイルエラーにならない場合、発見が困難ですので注意が必要です。
Copyright © ITmedia, Inc. All Rights Reserved.