- - PR -
変数の宣言の場所について教えてください。
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-25 17:04
いつもお世話になっております。
■A class test { private String a; public void hoge() { a = "○○○"; ・・・・ } } ■B class test { public void hoge() { String a; a = "○○○"; ・・・・ } } メソッド内で変数を宣言するBと外で宣言するAではどのような違いがあるのでしょうか? メモリの消費量にも影響してくるのでしょうか? どちらに書くのよいのかいつも疑問に思っていました。 どなたかご教授お願い致します。 | ||||
|
投稿日時: 2005-10-25 17:10
メモリ消費量よりもどういう範囲で変数が有効かという観点で決まってきます。
クラスのインスタンスの生存期間中継続して必要な値であればメソッド外に、メソッド内の処理だけで必要な値であればメソッド内で宣言すればOkです。 メソッドの先頭で毎回変数を初期化していれば動作的に変わりありません。 メソッドの外に変数を宣言していて、メソッド内で毎回値を初期化していなければ前回のメソッド呼出後の値を参照することができます。 | ||||
|
投稿日時: 2005-10-25 17:11
メモリの消費量というより、回収のタイミングなどを着目すべきかと。 そんなことより、 「スコープは極力小さく、変数は使う直前に宣言 && 初期化」 といった具合にコードの可読性を考えるべきだと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-10-25 17:34
インギ様
じゃんぬねっと様 さっそくのご解答ありがとうございます。 なるほど、クラスの先頭にクラス内で使用する変数を全部まとめて一箇所に 宣言しておいた方がわかりやすいのかなと思っていたのですがそうではない のですね。 スコープは極力小さくした方が読みやすいコードになるというのは勉強にな りました。 これからは、1つのメソッドでしか使用しないような変数はそのメソッドの 中で宣言して使用するようにしたいと思います。 使用直前に宣言 && 初期化なのですが次のような場合は、Bのように書いた方 が読みやすいのでしょうか? ■A private void hoge() { int a; int b; ・・・・・ ・・・・・ ・・・・・ ・・・・・ a = 10 + 20; ・・・・・ ・・・・・ b = 30 + 5; ・・・・・ } ■B private void hoge() { ・・・・・ ・・・・・ ・・・・・ ・・・・・ int a = 10 + 20; ・・・・・ ・・・・・ int b = 30 + 5; ・・・・・ } | ||||
|
投稿日時: 2005-10-25 17:41
int だとちょっと例が悪いんでしょうね。 int i = 0; i = 10 + 30; とか int i = 10; i += 30; とか。 これだったら、 int i = 40 とかにしろという例になりますからね。(^^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-10-25 17:42
一応、補足。 そのクラス「固有の状態」を示すものであれば、メソッド外での宣言というのはありえます。 メソッド内でしか使わない(もしくはそのメソッド内でのみ利用する)変数であれば、メソッド内にて宣言するようにしておきましょう。 そうしないと、あとでとんでもない不具合に泣かされます。 (特に、値をスワップさせるための一時的な変数とか。これらは、tempとか同じ名前で宣言されることが多いですが、メソッド内で宣言するようにしないと・・・面白いことにw) _________________ #「やらない」と「出来ない」を混同してはならない | ||||
|
投稿日時: 2005-10-25 18:05
じゃんぬねっと様
宣言中止!様 すいません、intで変な例をあげてしまって^^; 宣言はメソッドの先頭でまとめて一箇所でするよりメソッドの途中 でも使用直前にしたほうが読みやすくなるのでしょうかということ を書きたかったです。 宣言中止!様の例はどんな結果になるのかちょっとわかならなかっ たです。 cという変数なのですが、メソッド内では宣言されていないようです がメソッド外で宣言されているのでしょうか? tempの変数も使われていないように思うのですが。 | ||||
|
投稿日時: 2005-10-25 18:08
あれっ、書き込んでいる間に宣伝中止!様の返信が消えちゃってしまった^^;
|
1|2|3|4|5
次のページへ»