【Java練習記<6>】インベーダーゲーム / 引数にthisを使うことについて

あらすじ

前回同様、下のサイトでゲーム作り。インベーダーゲームが完成した。
Javaでゲーム作りますが何か? – 人工知能に関する断創録

引数にthisを使うことについて

今回のプログラミング作業の中で、ひとつ明確になったことがあった。それが「this」の使い方だ。

インスタンスを作成するとき、因数にthisを使うときがあった。たとえば、

Sample.java

class Sample {
 int x = 1;
  int y = 2;
  public static void main(String arg[]) {
    Hoge hoge = new Hoge(this); 
  }
}

みたいなものだ。

このときのthisは、クラスSampleを指していて、より正確には「Sampleをインスタンス化したもの」らしい。

とりあえず、thisを因数として使うことで、”x”や”y”をインスタンスhogeでも使うことができる、と考えておけば良いように感じた。

コンストラクタのthisと勘違い(?)しないように

thisを使うので、まず思い出すのが、コンストラクタ内にあるthisだ。さきほどの例を引き継いだとすると、

Hoge.java

class Hoge {
  Sample sample;
  public Hoge(Sample sample) {
    super();
    this.sample = sample;
  }
}

というコードが書かれるはずだ。

ここで使われているthisは、さっきのthis(クラスSample)を表しているのではなく、クラスHogeを指している。つまり、上で定義した変数sampleに引数を代入している、ということだ。わかりやすいように色をつけて表そう。

Javaのとっつきにくい点として、上のような文章だと「Sampleとかsampleばかりで、何を言ってるのかサッパリ」みたいなところがある。でも、オブジェクトについて理解してくると、なるほど理にかなった言語なのかもしれない。

ただ、こういった記述をすることによる利点はまだよくわからない。普通に「Sample.x」とかでも良さそうなものだが…。もう少しコードを書くなかで理解できるのかな。