- PR -

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

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-25 18:09
引用:

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

cという変数なのですが、メソッド内では宣言されていないようです
がメソッド外で宣言されているのでしょうか?
tempの変数も使われていないように思うのですが。


その投稿が消えてしまってますが、メソッド内で定義されているものでしょう。

コード:

int i1 = 10;
int i2 = 20;

int iTemp = i1;
i1 = i2;
i2 = iTemp;


という感じでしょう。(多分)

また、ローカル変数だけでなくブロック変数もなるべく使ってあげてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2005-10-25 18:26
じゃんぬねっと様
ありがとうございます。
なるほどっ、二つの変数を入れ替えるという処理だったのですね。
ブロック変数というのは初めて耳にしました・・・
Javaの入門書には載っていませんでしまた><
いつも参考にさせていただいているJavaの道様とJavaでHelloWold様
のサイトでもみつけられませんでした。。
http://www.javaroad.jp/index.htm
http://www.hellohiro.com/
ブロック変数というのはどのような変数なのでしょうか??
ローカル変数と使いわけると読みやすいコードが書けるものなの
でしょうか?

[ メッセージ編集済み 編集者: S_Tatsu 編集日時 2005-10-25 18:26 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-25 18:33
ブロック変数の例

コード:

if (bFlag) {
    int iHoge = 1;
       :
}

for (int i = 0; i <= 10; i++) {
      :
}

// iHoge はブロック変数
// i もブロック変数


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
S_Tatsu
ベテラン
会議室デビュー日: 2005/05/13
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2005-10-25 18:42
じゃんぬねっと様
わかりやすい例をありがとうございます。
今までなにげなく書いていたfor(int i = 0; i<= 10; i++)
のiはブロック変数という風に呼ばれるとは全然知らなかった
です。
iをfor{}の外で使おうとするとエラーになりました。
ブロック変数というのが一番小さなスコープになるのですね。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2005-10-25 20:16
ブロックというのは、簡単に言えば { } の間ということです。
「{ }の中でだけ有効」という意味では、forやifに限らずメソッドでもクラスでも同じなのが分かると思います。
(全部同じという意味ではないです、念のため)

宣言する場所は、「用途」で決めましょう。
(慣れてくると、「見やすさ」と「用途」は、ほぼイコールになると思います)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-25 20:37
なので、極端な例をあげるとこんなこともできます。

コード:

HogeCollection hCollection = new HogeCollection();

{
    HogeItem hItem = new HogeItem();
    hItem.Code = 1;
    hItem.Name = "中博俊";
    hCollection.Add(hItem);
}

{
    HogeItem hItem = new HogeItem();
    hItem.Code = 2;
    hItem.Name = "じゃんぬ";
    hCollection.Add(hItem);
}

{
    HogeItem hItem = new HogeItem();
    hItem.Code = 3;
    hItem.Name = "Jitta";
    hCollection.Add(hItem);
}

{
    HogeItem hItem = new HogeItem();
    hItem.Code = 4;
    hItem.Name = "やねうらお";
    hCollection.Add(hItem);
}
    :
    :


hItem という名前の変数は複数回使われてますが、どれも別物です。

# これは、Java、C# などで有効だったハズです。
# 最近、Java 触ってないので、少し忘れてます...w

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-25 20:50
メソッドの内での変数宣言とメソッドの外での変数宣言では、
目的も性格も全く違い、スコープ云々の話ではありません。

メソッドの外の変数はフィールドと呼ばれ、
インスタンスやクラスの状態を保持する目的で使用されます。
メソッドの中の変数はローカル変数と呼ばれます。

ところで、ブロック変数という名称は不適切ではないでしょうか。
Java言語規定の日本語版にも出てこない名前です。
(言わんとすることはよくわかりますよ)

ちなみに、スコープはifやforに関係なく、{}によって決まります。
以下のようなメソッドでは、コンパイルエラーになります。
コード:

public void hoge(){
int i = 0;
{
int j = 0;
}
System.out.println(j);
}



追記:サンプルソースがじゃんぬさんと被ったかも・・・

[ メッセージ編集済み 編集者: かつのり 編集日時 2005-10-25 20:53 ]
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2005-10-25 20:59
ども。
チェックボックスを間違えた・・・

さらに修正
コード:
■A 
private void hoge() 
{ 
//スワップする
int a; 
int b; 
int c; 

・・・・・ 
・・・・・ 
・・・・・ 
・・・・・ 
a = 10; 
・・・・・ 
・・・・・ 
b = 30; 
・・・・・ 
c=a;
a=b:
b=c;

} 

■B 
private void hoge() 
{ 
//スワップする
・・・・・ 
・・・・・ 
・・・・・ 
・・・・・ 
int a = 10; 
・・・・・ 
・・・・・ 
int b = 30; 
int c; 
・・・・・ 
c=a;
a=b:
b=c;
} 



まあ、既に話が終わっていそうなんで余計な書き込みかな?

あと、変数宣言の件は、正直な話、JAVA言語の本を読めばきちんと書いてあるとはずですので、
そちらを確認したほうがいいかな?という気はします。
_________________
#「やらない」と「出来ない」を混同してはならない

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