- PR -

変数の宣言の場所について教えてください。

投稿者投稿内容
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 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ではどのような違いがあるのでしょうか?
メモリの消費量にも影響してくるのでしょうか?
どちらに書くのよいのかいつも疑問に思っていました。
どなたかご教授お願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-10-25 17:10
メモリ消費量よりもどういう範囲で変数が有効かという観点で決まってきます。
クラスのインスタンスの生存期間中継続して必要な値であればメソッド外に、メソッド内の処理だけで必要な値であればメソッド内で宣言すればOkです。
メソッドの先頭で毎回変数を初期化していれば動作的に変わりありません。
メソッドの外に変数を宣言していて、メソッド内で毎回値を初期化していなければ前回のメソッド呼出後の値を参照することができます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-25 17:11
引用:

S_Tatsuさんの書き込み (2005-10-25 17:04) より:

メソッド内で変数を宣言するBと外で宣言するAではどのような違いがあるのでしょうか?
メモリの消費量にも影響してくるのでしょうか?
どちらに書くのよいのかいつも疑問に思っていました。


メモリの消費量というより、回収のタイミングなどを着目すべきかと。

そんなことより、
 「スコープは極力小さく、変数は使う直前に宣言 && 初期化」
といった具合にコードの可読性を考えるべきだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 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;
・・・・・
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-25 17:41
引用:

S_Tatsuさんの書き込み (2005-10-25 17:34) より:

使用直前に宣言 && 初期化なのですが次のような場合は、Bのように書いた方
が読みやすいのでしょうか?


int だとちょっと例が悪いんでしょうね。

int i = 0;
i = 10 + 30;

とか

int i = 10;
i += 30;

とか。

これだったら、

int i = 40

とかにしろという例になりますからね。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2005-10-25 17:42
引用:

S_Tatsuさんの書き込み (2005-10-25 17:34) より:

なるほど、クラスの先頭にクラス内で使用する変数を全部まとめて一箇所に
宣言しておいた方がわかりやすいのかなと思っていたのですがそうではない
のですね。
スコープは極力小さくした方が読みやすいコードになるというのは勉強にな
りました。
これからは、1つのメソッドでしか使用しないような変数はそのメソッドの
中で宣言して使用するようにしたいと思います。



一応、補足。

そのクラス「固有の状態」を示すものであれば、メソッド外での宣言というのはありえます。
メソッド内でしか使わない(もしくはそのメソッド内でのみ利用する)変数であれば、メソッド内にて宣言するようにしておきましょう。
そうしないと、あとでとんでもない不具合に泣かされます。
(特に、値をスワップさせるための一時的な変数とか。これらは、tempとか同じ名前で宣言されることが多いですが、メソッド内で宣言するようにしないと・・・面白いことにw)
_________________
#「やらない」と「出来ない」を混同してはならない
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2005-10-25 18:05
じゃんぬねっと様
宣言中止!様
すいません、intで変な例をあげてしまって^^;
宣言はメソッドの先頭でまとめて一箇所でするよりメソッドの途中
でも使用直前にしたほうが読みやすくなるのでしょうかということ
を書きたかったです。
宣言中止!様の例はどんな結果になるのかちょっとわかならなかっ
たです。
cという変数なのですが、メソッド内では宣言されていないようです
がメソッド外で宣言されているのでしょうか?
tempの変数も使われていないように思うのですが。
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2005-10-25 18:08
あれっ、書き込んでいる間に宣伝中止!様の返信が消えちゃってしまった^^;

スキルアップ/キャリアアップ(JOB@IT)