- PR -

現在のインスタンスを参照するthisキーワード、付ける? or 付けない?

投票結果総投票数:259
付ける 99 38.22%
付けない 66 25.48%
付けたり付けなかったり 94 36.29%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
ガルマ・ザビ
ベテラン
会議室デビュー日: 2007/06/07
投稿数: 55
お住まい・勤務地: ジオン公国
投稿日時: 2007-07-06 10:29
ガルマです。こんにちは。
VS2005 C# で開発しています。

くだらないことで申し訳ないのですが、
ちょっと気になったので皆さんのご意見をいただければと思います。

thisキーワードは、現在のインスタンスを参照する役割もあります。

私はコードを書くときに、「this.name = "ガルマ";」のように
現在のインスタンスを参照する場合は必ず this キーワードを付けるようにしています。
理由としては、自身のインスタンスを参照していることを明示的にしたいからです。

しかし、開発仲間の1人は「this が何度も何度もコード中に出てくるとくどい」といって
基本的に this は付けないという者もいます。
この考えも確かに一理あるな、とも思います。

皆さんは、どのように思いますか?
付ける、付けない、またその理由などを教えて頂ければありがたいです。

よろしくお願いします。


[ メッセージ編集済み 編集者: ガルマ・ザビ 編集日時 2007-07-06 10:31 ]
イシバシ
常連さん
会議室デビュー日: 2007/02/06
投稿数: 20
お住まい・勤務地: 浦安の隣
投稿日時: 2007-07-06 11:25
クラスのメンバなのかそうでないのか一目で判るので、付けてます。
(自分自身の為にも)

>this が何度も何度もコード中に出てくるとくどい
これは理由になるのかなぁ・・・?
もし社内のメンバーがこんな事言ったら張り倒しますけどね。
ガルマ・ザビ
ベテラン
会議室デビュー日: 2007/06/07
投稿数: 55
お住まい・勤務地: ジオン公国
投稿日時: 2007-07-06 11:53
ご返信ありがとうございます。

引用:

イシバシさんの書き込み (2007-07-06 11:25) より:

>this が何度も何度もコード中に出てくるとくどい
これは理由になるのかなぁ・・・?
もし社内のメンバーがこんな事言ったら張り倒しますけどね。



(笑)
確かにそんな気持ちにもなりますよね<張り倒す
あるコントロールのプロパティに連続で何かを設定したりするときは、
thisが続くことになるので、そういう辺りが「くどい」みたいです。

あまり説得力はないんですけど、、、。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-06 11:55
私も明示化したい派です。(プロパティ アクセサだと付けないことがありますが)

明示化の理由はわかりやすさを求めているからです。ですから、それなりの根拠あるコーディング ルールで決められたことであれば 「this を付けない」 に対して否定することはないと思います。

ただし 「this を付けない」 理由として「タイプするのが面倒くさい」 もしくはどうでも良い 「簡素化を求めて」 だったりするならば 『それは話をしている次元から違う』 と反対すると思います。

うちのユニットは私が勝手にルールを決めているのですがあまり混乱はありません。お話を聞いて 「オレオレ流に慣れられる前に "この部署流" に統一しておくことが大切なのかな」 と思いました。ついでに類似スレッドへのリンクを貼っておきます。Java でも動作さえ変わらなければ基本的に付けています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-07-06 11:59
私は書いたり書かなかったりです。
割とどちらでもよいと思っています。

MSのガイドライン通りの命名を行っていると考えた場合、
this を書く意味を、コードの可読性の点から考えてみると
「ローカル変数やメソッドのパラメータと、非公開フィールドの区別が明確になる。」
しかないと思います。
メソッドの長さがあまり長くなく、変数ができるだけ局所化されていれば、
この点はさほど問題にならないと思います。
少なくとも私は、this を書いたことによって可読性があがったと感じたことはありません。
それよりも、クラス設計や変数の局所化を適切に行うことの方がよほど大事だと思います。
また、メソッド呼び出しに関しては、他に混同するものがありませんから、
this をつける意味は感じません。

ただし、コードの可読性ではなく、コーディングの点から考えれば
this. と打てばインテリセンスが利くので、
入力を補完したりタイプミスを避けたりできるというメリットはあります。
私もそういうときは this をつけますので、結果として出来上がったコードには
this のついているものと、そうでないものがあります。

もちろん、必ず this を付けるという考え方を否定するわけではないですし、
this がついていて悪いことはないと思います。
(少なくとも「this が何度も何度もコード中に出てくるとくどい」などとは言いません)
しかし、生産性を落としてまで this をつけることを強要することはないと考えています。

当たり前ですが、明確に区別する必要のある場所では書きます。
例えばこんな場所
コード:
public class Person
{
    private string name;

    public Person(string name)
    {
        this.name = name;
    }
}

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-07-06 12:27
こだわりは大事だとは思いますが、原理的には、字下げのフォーマットを統一するようなもので、あとからリファクタリング(IDE などのツールのコマンドとしてのリファクタリング)でどっちにでも変換できるはずです。だから、別にどっちでもいいや、と思っています。

ただ、C# でも Java でもこれができるツールってあるのでしょうか?たとえなくても、もうちょっとしたら出てくるでしょう。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-07-06 13:14
私は逆かなぁ。
thisは付けません。::は必ず付けます。
thisを付けたところで動作が変わることは無いので、好きにしてくれって感じです。

むかし::を付けていなかったためにメンバ関数が呼び出されてて、手ひどい目にあったことがあるんですよ。え゛?C++の話ではない?こりゃまた失礼しました♪
ガルマ・ザビ
ベテラン
会議室デビュー日: 2007/06/07
投稿数: 55
お住まい・勤務地: ジオン公国
投稿日時: 2007-07-06 13:35
じゃんぬねっとさん、KIさん、unibonさん、甕星さん、レスありがとうございます。

●じゃんぬねっとさん

類似スレッドへのリンク、ありがとうございます。
参考になりました。

さすがに1つのメソッド内で、同じフィールドに対して
thisが付いたり付かなかったりしている場面があったので、
私的にはこういうの、辛いなぁと、、。
この辺りは、やはり部署流統一をしていこうと思います。

●KIさん

記載していただいたコードは、MSDNのいう
「似た名前によって隠ぺいされるメンバを修飾します。」というのですよね。
KIさんのように「どこにthisをつけるべきか」をしっかり判断できる方なら良いのですが、

これすら、thisを付けないで、

コード:

public Person(string name)
{
name = name;
}



なんてされているのを見たときには、泣きそうになりました。


> 少なくとも私は、this を書いたことによって可読性があがったと感じたことはありません。

この辺は本当に主観の問題になってきますね、、、。
可読性が上がると思えないのに、思えっというのも違いますし、その逆もしかり。。

> 〜 中略 〜 結果として出来上がったコードには
> this のついているものと、そうでないものがあります。

そうですか、、、。
私は統一感が無いと何だか気持ち悪くて嫌なんですよねぇ。

[ メッセージ編集済み 編集者: ガルマ・ザビ 編集日時 2007-07-06 13:41 ]

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