- PR -

superやthisなどの修飾子についてお聞きします

投稿者投稿内容
fyiru
会議室デビュー日: 2007/04/24
投稿数: 2
お住まい・勤務地: 港区
投稿日時: 2007-04-24 12:28
いつもこの会議室にはお世話になっています。
superやthisなどの修飾子についてお聞きしたいのですが…

私の場合、自身のクラスのフィールド変数やextendsしたクラスのフィールド変数に対し
必ずthisやsuperをつけているのですが、先輩方達はつけるのを嫌うようです。
パフォーマンスの視点から考えるとどっちがいいのだろう?どっちも一緒なのかなぁ?と考えて調べては見たのですが、中々情報が出てこなくて…

これは好みの問題程度の話なのでしょうか。
初歩的な質問なのかもしれませんが、わかりましたら是非お答え頂けないでしょうか?
宜しくお願い致します。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2007-04-24 12:39
つける必要があればつけるし、
つける必要がないならつけない。
理由:面倒だから

ところでなんで必ずつけるの?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-04-24 12:53
引用:

fyiruさんの書き込み (2007-04-24 12:28) より:
私の場合、自身のクラスのフィールド変数やextendsしたクラスのフィールド変数に対し
必ずthisやsuperをつけているのですが、先輩方達はつけるのを嫌うようです。


this なら、付ける付けないは選べる場面も多いでしょうが、super は、付ける付けないは選びようがないと思うのですが。

ちなみに eclipse のコンパイラーの設定(Java→Compiler→Errors/Warnings→Code style)では、this を付けないと警告やエラー扱いにしたりもできるようです。"Unqualified access to instance field" だったかな?
だから、付ける流儀もないことはないのだろうと思います。

this が省略できることは「デフォルト」の一種とも言えなくもないので、迷うのですが、でも、そんなのを付けたところで、見づらくなるだけで、本当に付けないといけない個所が目立たなくなるので、私だったら付けたくないです。

ためしにぜんぶ付けてみてください。すごいことになりますよ。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-24 13:22
パフォーマンスは変わらないでしょう。

私は C# でも Java でも this で同インスタンス内であることを明示化したい派なのですが、逝って良しですか? (w

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-04-24 13:29
私は基本的につけないですね。
規約でコンストラクタやsetterの引数とフィールドが同じ名前になるのだったら、つけざるを得ませんが。
thisはコンパイラにフィールドを明示するだけで、実行段階では変わらないでしょう。

superは…オーバーライドしてないメソッドを呼ぶ際には選べそうですが、
つけておいて、ある日オーバーライドしないといけないことになったら…。

[ メッセージ編集済み 編集者: mio 編集日時 2007-04-24 13:30 ]
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-04-24 13:35
必須のものをのぞいて、付ける付けないはどっちでもいい派です。
元々は明示化するために付けたいというふうに思う方だったのですが、

・全部に確実に付けるのが難しい。
 気分により、人により付けなかったり、どうしてもしてしまう
・全部付けると激しくうっとうしい
・必須で付けないといけないところが目立たない
・でも、コード補完のため「this.」と打つこともよくある

というわけで、どちらかというと特に付けないことが多いのですが、
場合によって付けたりします。

じゃんぬさんもコメントされていますが、
パフォーマンスには差はありません。
コンパイル時に解決される問題だからです。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2007-04-24 13:36 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-24 13:53
superもthisも意味があるもので、
superに至ってはあるなしで意味が違いますし、好みの問題ではありません。

もしかして、親クラスのデフォルトコンストラクタの呼び出しのことを言っていますか?
省略すると、コンパイル時にコンストラクタの先頭にsuper()が埋め込まれますが、
それなら省略しても問題ないと思います。

私の場合は、フィールドとローカル変数を同じ名前にするので、
明示的にフィールドとローカル変数を区別するときだけthisを付けます。
参照先はコンパイル時に解決しますので、
実行時のパフォーマンスの問題は発生しません。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-24 13:55
私は全部に付ける派。
とくに技術力の違う人が入り混じる開発現場に置いてthisを明示的に付けることで
「インスタンス」の意識を植え付けられることが大きいです。
オブジェクト指向もままならない人はいまでも多いですから…。

thisがついていない場合、それがstaticな変数・メソッドなのか、
インスタンスの変数・メソッドなのかが一見して分かりません。
よく分かっていない人に作らせるとスコープが広いからという理由で
フィールドをstaticにしたりするので(そして後で深刻なバグを残す…)
これらをコンパイル時に一掃するためにもthisを必須とするコーディング規約としています。

全部に付けるのが難しいという話があがっていますが、
既存のソースをすべて修正するのは確かに大変でしょう。
ですが、Eclipseなどの統合開発環境であればthisのついていない箇所を
洗い出すことは簡単ですし、警告するようにしておけばコーディング時に
付けることを促されるので徹底することは簡単です。
新規プロジェクトでは難なく100%のthis付属を達成することが出来ます。

this付きのコードが鬱陶しいかどうかは主観によるところなので
議論する気は無いですが、少なくとも私は鬱陶しいとは思いません。

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