- - PR -
現在のインスタンスを参照するthisキーワード、付ける? or 付けない?
投票結果総投票数:259 | |||
---|---|---|---|
付ける | 99票 | 38.22% | |
付けない | 66票 | 25.48% | |
付けたり付けなかったり | 94票 | 36.29% | |
|
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-06 17:29
似て非なる名前が多種あるというのは認識のしやすさという点でデメリットがありませんか? アンダーバーの付け方とかで一貫したルールを用意するとか言い始めると逆に煩雑になりますし。 言語でスコープを明示できる機能がついた流からすると、それを命名で代替しようというのは逆行しているような気がします。 | ||||||||||||
|
投稿日時: 2007-07-06 17:40
ちょっと意味がわかりませんが、逆にわかりにくいという意味でしょうか? 似て非なる方がいいと思いますが。全く同じ名前で非より。 下のコードはバグがあるのですが、パッと見てすぐにわかりますか? アンダーバーを付けてればすぐにわかるのですが。
_________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2007-07-06 17:49
私はじゃんぬねっとさんが挙げた過去スレでも言ってますが、
基本的にどっちでもいい派です。 #でも、個人的には全部に付けるというはやはりくどいなと思っています。 Pythonのクラスなんかだと インスタンスメソッドの第一引数に自身のインスタンス用の引数(self)を 書かないといけなくて、インスタンス変数は強制的に self.〜で書かないといけないのですが、 エディタのみでプログラミングしているとこの仕様はなかなか面倒です。 開発環境の充実と共に補完もしてくれるんだから、 thisくらい付けとけって派が多くなるのでしょうね。 ちなみにstatic変数/メソッドはクラス名を明示する派です。 クラス名を変更したときには一緒に修正しないといけなくなりますが、 どのクラスの所属かがはっきりし、かつ、static変数/メソッドだとはっきりするので明示します。 インスタンス変数/メソッドのthisは省略してもいいけど、 static変数/メソッドのクラス名は省略して欲しくないですね。 つまり、static変数/メソッドのクラス名は省略しないから、 インスタンス変数/メソッドのthisは省略したっていい、という発想なんですね。 別のクラスのインスタンスなら「インスタンス変数.」が必須ですから、 残りのものはローカル変数、インスタンス変数、インスタンスメソッドなので、 どの種類かは名前を見ればわかるように命名されているはず。 もちろんプロジェクトのルールがあればそれに従いますので、 上記の基準は個人的にプログラミングするならといったところでしょうか。 | ||||||||||||
|
投稿日時: 2007-07-06 18:55
先の私の発言は、ネームスペースで分断された時点で別空間なんだから、 ネームスペースが無かった時代の言語みたいに自力で名前がかぶらないように する必要はないだろう、必然性はないだろう、という主張だったのですが、
この例は非常に説得力を持っていますね。 たしかに、ハイライトやコード補完、細やかなエラー警告がでるような高機能なIDEでの 開発ではこういったミスは即刻警告されるのでなんら問題とはならないのですが、 単なるテキストエディタでソースを開いたときには見過ごしてしまうでしょうね。 ネームスペースが別だといっても出来るだけユニークな命名にしたほうがよいのかな…。 話題が大分逸れました。申し訳ない。 | ||||||||||||
|
投稿日時: 2007-07-09 09:08
皆様、たくさんの投稿ありがとうございました。
付けないという方が私の予想以上にいらっしゃって、驚きましたが、 その方々の投稿を読ませていただいているうちに、少し見方が変わりました。 今後もまた、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2007-07-09 10:04
たぶんオフトピですが...
ネームスペースとは .NET における名前空間を指していますか? もともとそのクラスのインスタンスそのもののお話だったので、スコープの強さのお話なのかと思いましたが...
ユニークにして可読性というか使用感を損ねるくらいならやめた方が良いと思われます。 たとえば完全修飾名の一部だけをずらすことによって Action を示す名前の統一を図った方が "同じような使い方をする" という予想がつきます。サービス指向と呼ばれるものでしょうか。 このように同名の方がわかりやすいパターンも多くありますので、ユニークの方が望ましいということは一概に言えないと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-07-09 11:10
とくに.NETの、というわけではないですね。 同一名称だけど空間が違うから別物扱いだよ、って意味合いで(多分かなり広義で)使っています。 .NETの名前空間、Javaのパッケージの概念に加え、ここでは インスタンス変数とローカル変数も「別の空間」として論じています。 (ん?もしかしてフィールドのハイディング限定の話なのか?これは) いずれも、完全名を使うことで識別はできるが、通常は修飾部分を省略して 同一名のように見えるわけですね。
えぇ、一概に言えない、というのが現状の結論です。 個人的には修飾部が違うことで区別できるのだし、ユニークにする必要はないという 意見だったのですが、囚人氏の意見で存外難しい話題だと思わさせられました。 | ||||||||||||
|
投稿日時: 2007-07-09 12:24
囚人さんの意見というか抜粋したコードに関しては本人が書かれているとおり、アンダースコアで解決できると思います。 囚人さんは最初からそういうつもりで発言していたようにも見えます。> "似て非なる方がいい" たとえば、アンダースコアはプロパティ変数 (Private フィールド) を示すとかそういう工夫全般を指しているのではないでしょうか? > "スコープで名前付けを工夫したら良い"
ちなみに、2007-07-06 15:27 にある囚人さんの投稿は、「this あり + アンダースコアなし」 対 「this なし + アンダースコアあり」 で比較しているように見えるので少々フェアでないと感じました。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |