- - PR -
superやthisなどの修飾子についてお聞きします
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-24 14:41
普通にJavaのコーディング規約に沿って開発していれば、 クラスとインスタンスの違いは一目で分かるような・・・ 1文字目が大文字か小文字で見分けられるかと。 | ||||||||||||||||
|
投稿日時: 2007-04-24 14:54
ぼくはEclipseとかNetBeansで、コード補完が簡単になるので「必ず付ける派」ですねー。
インスタンス変数/メソッド両方とも毎回this.とタイピングしてからコード補完させてます。 コードリーディングするときもthisがついてた方がなんとなく安心感があるし。 付けなくてよいものを付けたくないって人の気持ちもわかりますけど。 _________________ 『Life's rich Tapestry!!』 | ||||||||||||||||
|
投稿日時: 2007-04-24 14:59
弊社ではthisもsuperも付けるようになっていますが私は反対派です。
あと、「java.lang.*」を明示的にインポートしたりしないで欲しいです・・・。 弊社の人達はデフォルトで行われる事が嫌いで、 明示的にコードを直接記述したいようです。 | ||||||||||||||||
|
投稿日時: 2007-04-24 14:59
多くの返答有難うございます。
パフォーマンスは変わらないとの事なので自分の中では一安心です。 私の場合ですが、thisをつけるのは同インスタンス内で作成されたインスタンス変数であるとぱっと見て判断できるようにする為です。 Eclipseを使用している場合、色をつけたり斜文字にする事が可能ですのでいいのですが、急を要する場合に、メモ帳で行わなくてはならない場合等、ローカル変数なのかインスタンス変数なのかを判別するのが楽だという点もあります。
すいません。Java本来のコーディング規約というものを十分に把握していなくて…。 checkStyleを導入した際に、大文字から始まる変数はすべて警告にされていたと思っていたので、大文字からのインスタンス変数は基本として使用してないですね…。勘違いだったのかもしれないですね…。 superの修飾子に関してなのですが、例文としまして public class oya { protected String a; } public class ko extends oya { public void method() { String strA = super.a; String strB = a; } } という形で、strAとstrBで同じ意味になると思います。 この場合、つけるべきかどうか…だったので、thisと同じで明示的…ぐらいにしかとらえていませんでした。 オーバーライドの際、どういった問題が出てくるのかというのがまだ頭の中で整理できていませんので、少し見直してみます。mioさん有難う御座います。 | ||||||||||||||||
|
投稿日時: 2007-04-24 15:24
普通と言う言い方が悪かったですね、 まあ、色々な所が色々なJavaのコーディング規約を設定しているんですが、 まあ、中身は大体似ているのかなと。 Sunが有名ですかね。 http://java.sun.com/docs/codeconv/ で拾えるんで拾って読んでみて下さいな。 日本語訳なら http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/ 【編集】 日本語訳のURLを貼った。 [ メッセージ編集済み 編集者: さる 編集日時 2007-04-24 15:27 ] | ||||||||||||||||
|
投稿日時: 2007-04-24 16:12
privateじゃないフィールドはカプセル化を壊しやすいので、
かなり注意して使わないと、親クラスで予期しないバグを起こしやすいです。 ですので、私は基本的に使わないので、 superを付けてフィールドを参照することはありませんね。 fyiruさんの例においては意味が同じではなく、 たまたまそのコードにおいて参照する先が同じになっただけです。 話がそれますが、
*を使っているだけで、既に明示的になっていないような・・・ import java.lang.*;はちょっと悲しくなりますねww | ||||||||||||||||
|
投稿日時: 2007-04-24 16:29
明示的にと言っているのはクラスの事ではなく、パッケージの事です。 勿論、Integer等のクラス単位でインポートもNGです。 Javaではjava.langパッケージは、自動的にインポートされますからね。 ちょっと言葉足らずでしたね。 | ||||||||||||||||
|
投稿日時: 2007-04-24 16:35
メソッドは当然分かるのですが、問題はフィールドですね。 static finalなものは命名規約が違うので分かりやすいのですが、 インスタンスのフィールドもstaticなフィールドも名称は変わりません。
教育期間にある新人プログラマにはthisを付けるように指導しています。 thisを付けさせることで、それがインスタンス対する操作なのか、 クラスにたいする操作なのかを意識させることが重要だと思います。 インナークラスの扱いを教える際にはthisの前のクラス名も省略しないように指導しています。 このあたりは「分かっているから省略しても良い」のであって分かるまでは省略しないほうがよいでしょう。
どういうルールで省略されるのか、そらんじていえる方が混同しにくい場所で 省略した記法を用いることはなんら問題ありません。 どうやったらそこまで早く到達できるかといえば、まずは省略されているものを 省略しないで、そこで何が行われているかを理解することでは無いでしょうか? importにしても、まずは絶対名を覚えてからimportを覚えないといけませんよね。 java.util.Listとjava.awt.Listを一緒に使いたいとか、そういうときに うろたえているようでは困るのです。 |