みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

変数の宣言と使用について

こんばんは。
数日前から、Javaのプログラミングの学習をしている者です。
とある書籍を読んで、インターネットで調べながら学習しております。
(オブジェクト指向は学習しておらず、三大制御構造まで学習済です。)
まだまだ無知な身分であり恐縮ですが、もしよろしければご教授下さい。
ある程度検索しましたが、既に同一の解決済み質問がありましたらご容赦下さい。

当方は、Javaの前にCOBOLとC言語を学習しました。
それらの言語では、変数宣言は処理の最初にまとめて記述していました。
(COBOLはデータ部、C言語は関数内の最初)

Javaのソースコードを参考にすると、処理(メソッドブロックなどのブロック内)
の最初にまとめて記述しているのではなく
「一文で使用直前に宣言して、同時に初期化代入している」のをよく見掛けます。

Javaでは使用直前に宣言して使用するのがルールであり、
宣言をブロック内の最初にまとめて行っておくのは御法度でしょうか?
(個人的にはC言語と同じように記述したいですが、Javaでは逆に
読みにくくなってしまうため、よろしくないという解釈で正しいですか?)

変な質問で大変申し訳ありませんが、ご回答頂けますと嬉しいです。
以上、よろしくお願い致します。

投稿日時 - 2015-03-29 19:14:34

QNo.8945267

暇なときに回答ください

質問者が選んだベストアンサー

Javaでは、変数宣言はブロックの最初にまとめて記述していても、処理の直前に記述していても同じように動作しますが、後者のように処理の直前に記述するスタイルが主流です。
他の人がコードを読む時の可読性を考えると、主流のスタイルに従う方がよいと思います。
英語ネイティブの英米人が日本訛りの英語に違和感を感じるのと同様、JavaのネイティブプログラマーはC訛りのJavaコードに違和感を感じますし、特にチームで開発する場合を考えるとその言語の主流に慣れている方がメリットが大きいと思います。

ちなみにCの初期バージョンで変数宣言をメソッドの先頭で記述するように規定されていたのは、RAMが少ない環境でも実行できるようにコンパイラがある程度の最適化を可能にするためだったそうです。

他にもCとJavaでコーディングスタイルにいくつかの違いがあります。
下記にいくつか事例が紹介されています。

http://www.ibm.com/developerworks/jp/java/library/j-noaccent.html

投稿日時 - 2015-03-31 09:53:26

お礼

ご回答ありがとうございます。
今回の疑問が発生したのは、私の学習を一通り終わらせていない事が原因でした。
そういうスタイル(記述の仕方)にしないとデメリットの方が多くなる
(非効率になる、オブジェクト指向・応用に関わってくる)ということに繋がるのですね。
C言語のことは置いといて、ベースとなる知識だけ生かしながら、
1からJavaを正しく学んでいくことにしたいと思います。皆様本当にありがとうございました。

投稿日時 - 2015-03-31 14:05:09

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>Javaでは使用直前に宣言して使用するのがルールであり、
>宣言をブロック内の最初にまとめて行っておくのは御法度でしょうか?

「ルール」「御法度」の言葉の意味にもよりますが。単に「変数宣言を先頭に書いて動くかどうか」でいえば動きます。が、仕事等でそんな書き方をすれば、「こいつ使えないやつだな」と思われます。

投稿日時 - 2015-03-31 00:58:42

お礼

ご回答ありがとうございます。申し上げておりませんでしたが、動作するかは、実機で実習した結果で既に判明しております。動作するかというのは重要ではなく、その記述自体が、Javaにおいて是非かどうかを伺いました。「こいつ使えない」というのは、複数人数で開発する場合に『取り決めたルールに従わずに、勝手に思い込んでプログラミングを行ってしまった事が原因である』という解釈を致しました(もし間違っていたら申し訳ありません)。ご意見ありがとうございます。

投稿日時 - 2015-03-31 13:59:29

ANo.2

C言語の変数宣言は、昔はブロックの最初にまとめて記述することしかできませんでしたが、1999年版のC言語規格(C99)からは変数はブロック内のどこでも宣言できるようになりました。

(参考)
http://ja.wikipedia.org/wiki/C99

今でもC言語ソースの多くが関数の先頭で変数宣言されているのは、C99より前のC言語仕様でコーディングしたものをそのまま引き継いだり流用したりしているためです。

C言語でもJavaでも、本来は使用を開始する直前に宣言した方がわかりやすいと思います。その宣言があることで、これから新しく使い始める変数であることが明確になるからです。それが明確でなければ、その変数が既に別の用途で使われているものでないか、現在の値はどうなっているか等、いろいろ影響を注意しながら読み書きする必要があります。新しく宣言した変数はそういう他への影響がないことが保証されるので、安全に使うことができます。

JavaやC言語がブロック内のどこでも変数を宣言できるのは、そういう安全性を確保するための言語仕様の改善の結果です。

投稿日時 - 2015-03-30 10:10:29

お礼

ご回答ありがとうございます。最初に記述する理由は、仰せられる通りです。私が無知であるために書けませんでしたが、代弁して頂きありがとうございます。皆様の回答により、どちらでも可能であるが、複数人数で開発する場合は、意向(取り決め)に従うのが最善という結論に辿り着きました。

投稿日時 - 2015-03-31 13:52:51

ANo.1

COBOLはデータ部で宣言しなければなりません。

CもJavaも同じなのですが、
変数は宣言したブロック内でしか使えません。

Javaの例
for(int a=0;a<10;a++){
:
:
}

なのでその変数をあちこちで違う目的で宣言できますし、
値がおかしい時COBOLのように、探し回る必要がありません。

もちろん、一括してプログラムの最初に宣言しても問題はありません。

投稿日時 - 2015-03-29 19:23:13

お礼

ご回答ありがとうございます。仰せられる通りで、C言語も使用前であれば、ブロック内のどこでも宣言できてブロック内でしか使えないですね。Javaも同じように記述しても問題が無いということで少し安心しました。

投稿日時 - 2015-03-29 19:29:07

あなたにオススメの質問