2011年5月7日土曜日

[Java] thisとは

What is "this"

Javaには「this」というキーワードがあります。Javaで書かれたAndroidアプリのソースにも頻繁に登場します。

thisはインスタンス化されたクラスの自分自信を指します。
「this.」の後にクラスのメンバー変数やメソッドを書くことができるし省略することもできます。
staticなメンバーやメソッドはインスタンス化されないのでthisをつけて書くことはできません。

以下は説明のためのサンプルソースです。
Activity(Sample1.java) このサンプルでは(1)と(2)がthisをつける例です。
(3)はstaticなのでthisではなく自分のクラス名をつける例です。
このソースの(1)と(2)のthisと(3)の自分のクラス名は省略可能です。

変数名が競合する場合はthisを省略できません。
次のサンプルはthisやクラス名を省略できないケースです。
Activity(Sample2.java) Sample2のフィールドメンバー(1)(2)と、onCreateメソッドのローカル変数(3)(4)にそれぞれ「a」「b」という変数があります。
この場合、thisをつけた「a」は(1)が、つけない「a」は(3)が使われます。
クラス名をつけた「b」は(2)が、つけない「b」は(4)が使われます。
このサンプルはthisの省略ができないことを示すだけで、紛らわしい変数名を区別するためにthisを使うべきではありません。

ただしアクセサー(setter)では敢えて同じ変数名を使ってthisで区別する人もいます。

Eclipseを使っていれば、「this.」と入力するとそのクラスのフィールドやメソッドの一覧が表示されます。省略可能でも敢えて省略しない人も多いと思います。
「this.」を入力しなくてもCtrlキーを押しながらスペースキーを押しても同じことができます。

省略可能なthisを書くべきか、略すべきか
書いても書かなくても実行時のパフォーマンスに影響はないのでどっちでもいいと思います。読みやすいソースコードを書くことが大事だと思います。

以上、参考になれば幸いです。
[Java] thisとは #2 も公開しました

0 件のコメント:

コメントを投稿