this.Foo();
10
1
私はhttps://stackoverflow.com/questions/218123/what-was-the-strangest-coding-standard-rule-that-you-were-forced-to-follow#220591 [この回答]とそのコメントを読み、私は興味がある: this
/` Self` / `Me`を使わない理由はありますか?
ところで:これが以前に頼まれたなら申し訳ありませんが、SOで `this`という単語を検索することは不可能であるようです。
15 Answer
9
警告:下記の純粋に主観的な答えです。
これ/ self / meを使わないのが一番の理由は簡潔さだと思います。 それが既にメンバ変数/関数であるならば、なぜ冗長に接頭辞を追加しますか?
個人的には、コンパイラの特定の表現を明確にする必要がない限り、この/ self / meの使用は避けます。 多くの人がこれに反対していますが、私がこれまで働いてきたどのグループでもそれが本当の固執点になったことはありませんでした。
8
一般的なシナリオのほとんどは、すでに引用した2つの記事で取り上げられていると思います。主に簡潔さと冗長性対明確さ - 軽微な追加:C#では、現在の型の「拡張メソッド」にアクセスするには「this」を使用する必要があります。
this.Foo();
ここで `Foo()`は外部的に次のように宣言されています。
public static void Foo(this SomeType obj) {...}
5
c#の次の例のように、場合によっては明確になります。
パブリッククラスSomeClass {プライベート文字列stringvar = ""; public SomeClass(string stringvar){this.stringvar = stringvar; }}
3
もしあなたがStyleCopをすべての規則と共に使っているのであれば、 `this.`をに入れます。 私がそれを使い始めてから、私は自分のコードがもっと読みやすいと思いますが、それは個人的な好みです。
2
これは問題にならないと思います。なぜなら、コードの読みやすさが増すだけなので、良いことです。
PHPのようないくつかの言語では、クラスフィールドやメソッドを使う必要があるなら、$ this→の接頭辞を付けることさえ必須です。
PHPがそれなしでクラスメンバーを参照する何らかの方法を持っている場合、私はそれがいくつかの行を必要以上に長くすることができるという事実が好きではありません。
2
私は個人的に this.whatever`は読みにくくなっていると思います。 2行メソッドの違いに気付かないかもしれませんが、クラスの至る所で `this.variable`と
this.othervariable`を取得するまで待ってください。
さらに、私は `this.`を使うことは嫌いなハンガリー記法の一部の代わりとして見つけられたと思います。 そこにいる人たちの中には、変数がクラスメンバーであることを読者が見ることがさらに明確であることを知り、 `this.`がトリックをしました。 しかし、私たちがさらに明確さを必要とするならば、なぜ私たち自身をだまして、そのために普通の m_ "`または単に
_ _ "`を使わないのですか? 5文字です 2(または1) 少ないタイピング、同じ結果。
そうは言っても、スタイルの選択はまだ個人的な好みの問題です。 コードを変更するのに役立つような方法でコードを読んでいた人を納得させるのは難しいです。
2
ええ、eclipseは色フィールド、引数、およびローカル変数をさまざまな色で処理するので、少なくともeclipse環境で作業する場合は、自分や将来の世代のために特別にそれらを「フィールド」としてマークするためにフィールドを構文的に区別する必要はありません。
1
それは「Javaの変数」の文脈で、実際に前に尋ねられました:
https://stackoverflow.com/questions/132777 [javaのインスタンス変数の前に「this」を付けますか。
主な原因は次のようです。
_ 「コードの意味を見つけるためにふるいにかける必要がある視覚的なノイズが増えます。」 _
読みやすさ、言い換えれば… 私はこれを買わない、私は「これ」を見つけるのが非常に役に立つ。
1
それは私にとって無意味なようです。 'this’を使用するとコードがよりきれいになりますし、問題ありません。 そのような政策は愚かです(少なくとも人々に彼らが正しい立場にある理由を伝えさえしないとき)。
1
'この。'コード内では、常にコーダーがintellisense(または他のIDEの同等物)を使用してそれらの重い作業を行ったことを私に示唆しています。
私は確かにこれについて罪を犯しています、しかし私は、純粋に虚栄心の理由のために、後でそれらを削除します。
私がそれらを使用する他の唯一の理由はあいまいな変数を修飾すること(悪い習慣)または拡張メソッドを構築することです
変数を修飾する
文字列名。 // _nameやm_nameのようなものを使うべきです public void SetName(文字列名){this.name = name; }