- - PR -
現在のインスタンスを参照するthisキーワード、付ける? or 付けない?
投票結果総投票数:259 | |||
---|---|---|---|
付ける | 99票 | 38.22% | |
付けない | 66票 | 25.48% | |
付けたり付けなかったり | 94票 | 36.29% | |
|
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-06 13:56
私はじゃんぬねっと氏が挙げた過去スレでの発言で概ね言い尽くしてしまった感がありますが…。採録ということで。
自分は教育的観点から、thisをつけるように指導しています。 オブジェクト指向経験の浅い人には常に「何のインスタンスに対して」操作を行っているのかを意識してもらうためです。 変数の種類を理解し使い分けられるようになるまでには相応の訓練が必要です。 初心者にとってはstatic変数もinstance変数もローカル変数も同じに見えます。 単にスコープの違いぐらいにしか見えません。 一時変数をstatic変数で宣言するとかやってくれます。 「こっちだと宣言が一回で済むから」いえね、それよりもっと大事なことがあるんだよ、と。 とくにインスタンス変数の意味というか、インスタンスの概念を身に付けさせるのが大変です。 この部分、thisをつけさせることで、何のオブジェクトに対する操作かということを常に意識させることは効果的です。 見えないものは存在しないわけではない、ということが分かるまでは省略しないほうがいいと思っています。 なお、インナークラスの説明をするときは クラス名.this.変数名 という完全に省略なしの記述方式で説明しますし、 インスタンス.new インナークラス(); といったように、エンクロージング型のインナークラスはnewの前の インスタンスも省略しないで書かせるようにしています。 このあたりも、理解したのなら省略しても構わないと思いますね。 | ||||
|
投稿日時: 2007-07-06 14:07
(ガルマ・ザビさんの返信ではなくなってしまうかもしれませんが...) これも反論にしては弱いでしょうね。「くどい」 は理由にならないです。くどいということは 『ああ、もうわかったわかった』 ということですよね。これは相手に伝わっているということです。(読むことができている) 「くどい」 を 「面倒」 に読み替えたとしても素直にコピペで済むのではないかというレベルですよね。With だったりカスケードみたいなものを言語仕様に加えると途端に (VB によくありますが) ひどいコードが増えてきそうで怖いですし、中継となる参照を格納しておくのもバグの温床になることがあります。 -- 皆さんで決めることですからどちらでも納得さえできれば良いとは思いますが、少なくとも上記の理由では反論は必至でしょうね。そういう議論の場を設けて意見を出すだけ出してもらってから決定で良いと思います。あとは生産性を考えると大人数の方の意見が採用されるのは当たり前だと納得して頂くくらいですね。ただ 「くどいと感じる人がいる」 と 「読みにくいと感じる人がいる」 だと重要度が明らかに違いますから難しいかもしれません。何はともあれ今からでも早めに統一しておいて損はないと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-07-06 14:16
こんにちは。
this付ける派が意外に多いんですね。 私の場合は、(C++ですが)thisキーワードはほとんどつけないですね。必要な場合を除き。 他人の公開ソースコードを見ても付けてないほうが多い気がします(注意してみてないので主観的ですが)。 今私が確認できる公開ソースコード(Java6 VMや sscli2.0[.NETのVM]のコード)をみても むやみにthisは使用していないように見えます。#一応grepしてみました。 ただし、下記のような場合はもちろんthisは使います。 ・同名のメソッドの仮引数とインスタンス変数がある場合の区別。 ・thisポインタ/参照を関数の引数で渡す。 ・thisポインタ/参照を戻り値で返す。
| ||||
|
投稿日時: 2007-07-06 14:43
皆様、ご返信ありがとうございます。
勉強になります。m(_"_)m nagiseさんの観点は違った角度からの考え方で、 なるほどと思います。 thisを全く利用しないということは無いですよね? つまり、基本的には付けないスタンスでも、 似た名前によって隠ぺいされるメンバを修飾する場合など、 適所にはthisを付ける。 しかし、このようなことを新人に教えてもピンと来ないでしょうし、 基本的には付けませんよ、と教えるのに説得力を持たせ辛いですね、、。 じゃんぬねっとさんの仰るとおり、俺流にならないように 早めにルール化していきたいなと思います。 ちなみに.Net Framework をReflectorで覗いてみたら、 thisを結構つけていました。 [ メッセージ編集済み 編集者: ガルマ・ザビ 編集日時 2007-07-06 14:44 ] | ||||
|
投稿日時: 2007-07-06 14:50
こんにちは。
Reflectorで見るソースコードはリバースエンジニアリングによって”生成”されたコードですよね!? | ||||
|
投稿日時: 2007-07-06 15:03
本当だぁ、そうですね、、、Y(>_<、)Y | ||||
|
投稿日時: 2007-07-06 15:19
まったくもってどっちでもいい派です。
人のコード直すときに、どこにもかしこにもthisがついていればつけるかもしれないし、 プロジェクトのルールとして決まっていれば当然つけるし、 あとインテリセンス出したくてthis.ってうつことはあります。 ところで、メンバ変数の場合はつけるけどメソッドの場合はつけないって人は多いんじゃないでしょうか。 私もメソッドの場合はまずつけません。 | ||||
|
投稿日時: 2007-07-06 15:27
this を付けないに一票。でも、別に付けてもいいのでどっちでも良いっちゃあいいですが。
それよりも、スコープで名前付けを工夫したら良いと思っているので。 this を付ける付けないはフィールドの事だけ言ってるのでしょうか?プロパティやメソッドも? 正直 this を付けたらクドイかな、思ってます。 (下記の Func1() を比較)
_________________ 囚人のジレンマな日々 |