質問: C, Java の変数の定義位置についての質問です。 C では「オート変数はブロックの先頭で定義する」スタイルが多く、 たしか Java の coding convention でもそれが推奨されていたと思います。 このスタイルは、変数の定義と使用箇所が離れるため読みにくいと思うのですが、 なぜ推奨されているのでしょうか? ちょっと考えると「そのブロックで使用されている変数が一覧できる」というメリットがあるような気がしますが、 このスタイルが守られない場合も多いため、実際には「一覧」にはならないとおもいます。 そのメリットを活かすためには「ブロックの最初以外で定義したら文法エラー」とすれば良いと思うのですが、 そうなってません。 * どういうメリットがあるのか? * なぜ文法で強制しないのか? について教えてください。
回答: ここでいうJavaのcoding conventionとは何を指していますか? 俗にいうコーディング規約は、そのプロジェクトごとに多少変化を設けることも必要だと思っています。 例えばですが、オブジェクト指向倶楽部のJavaのコーディング規約には、この宣言の箇所については、一切触れられていません。 強いて解釈すると、 ・Javaの言語仕様に準じる つまり、宣言位置は先頭でなくてもよい or プロジェクトごとに決める ・先頭でまとめては行わない (50)宣言と初期化の部分を強引に解釈すると、 「初期化と宣言を同時に行うべき」→「初期値が決定する、初期化すべき場所で宣言する」 と受け取れて、そうすると、どちらで解釈しても先頭で宣言すべきでないというのが妥当かと思っています。 他の方がおっしゃっているように、従来Cにおいては関数の先頭で宣言する必要がありました。 それが、C99やC++、あるいは、Javaではどの場所でも宣言できるようになったのには、それなりの理由があったはずです。と考えれば、先頭で宣言すべきというのは、決してよい方法ではないと認識しています。 ただ、プロジェクトによってはこれを推奨した方がよい場合もあります。それは、ベテランのC屋さんが多いプロジェクトの場合です。この場合、多くの人が先頭での宣言のコードになれていますので、その人たちに読みやすいコードを規約とすることはありだと思います。 余談ですが、以前関わったC++プロジェクトで、できるだけCっぽく書いてくださいといわれて、なるべく先頭で宣言したことはあります。 何かの参考になれば。