「これ」(「自己」、「私」、…)を使用しない理由はありますか?
-
22-07-2019 - |
質問
この回答とそのコメントと私は興味があります: this
/ Self
/ Me
を使用しない理由はありますか?
ところで:これが以前に聞かれたらすみません、SOで this
という単語を検索することは不可能のようです。
解決
警告:以下の純粋に主観的な答え。
最高の「理由」だと思うthis / self / meを使用しないのは簡潔です。既にメンバー変数/関数である場合、なぜ冗長にプレフィックスを追加するのですか?
個人的には、コンパイラの特定の式を明確にする必要がない限り、this / self / meの使用を避けます。多くの人々はこれに反対しますが、私がこれまで働いてきたどのグループにおいてもそれが本当のこだわりであるとは思いませんでした。
他のヒント
一般的なシナリオのほとんどは、すでに引用した2つの投稿でカバーされていると思います。主に簡潔さと冗長性と明快さ-マイナーな追加:C#では、「this」を使用する必要があります。 「拡張メソッド」にアクセスするため現在のタイプ-つまり。
this.Foo();
where Foo()
は次のように外部で宣言されています:
public static void Foo(this SomeType obj) {...}
C#の次の例のように、場合によっては明確になります:
public class SomeClass
{
private string stringvar = "";
public SomeClass(string stringvar)
{
this.stringvar = stringvar;
}
}
すべてのルールをオンにしてStyleCopを使用すると、 this。
を挿入できます。使用を開始して以来、コードは読みやすくなっていますが、それは個人的な好みです。
これは問題ではないと思います。これはコードの読みやすさを向上させるだけだからです。
PHPなどの一部の言語では、接頭辞$ this->が必須です。クラスフィールドまたはメソッドを使用する必要がある場合。
PHPがクラスメンバを参照せずにクラスメンバーを参照する方法がある場合、一部の行が必要以上に長くなるという事実は気に入らない。
個人的には、 this.whatever
は読みにくいと思います。 2行のメソッドの違いに気付かないかもしれませんが、クラスのすべての場所で this.variable
と this.othervariable
を取得するまで待ちます。
さらに、 this。
の使用は、非常に嫌われているハンガリー記法の一部の代替として見つかったと思います。そこにいる一部の人々は、変数がクラスのメンバーであることを読者が理解することはより明確であることを発見し、 this。
がトリックを行いました。しかし、さらに明確にする必要がある場合は、単純な古い" m_"
または単に" _"
を使用しないでください。 2文字(または1文字)に対して5文字です。タイピングが少なく、同じ結果。
とはいえ、スタイルの選択は依然として個人の好みの問題です。コードを変更するのに役立つ特定の方法でコードを読んでいた人を納得させるのは困難です。
まあ、eclipseは色フィールド、引数、ローカル変数を異なる色で処理するので、少なくともEclipse環境では、フィールドを「フィールド」として特別にマークするために構文的に区別する必要はありません。あなた自身と世代が来るために。
「javaの変数」で実際に尋ねられました。コンテキスト:
Javaでインスタンス変数の先頭に「this」を付けますか?
主な再発理由は次のようです:
"コードの意味を見つけるためにふるいにかける必要がある視覚的なノイズが増加します。"
読みやすさ、言い換えれば...私は購入していませんが、 this。
は非常に便利です。
それは私にはナンセンスのように聞こえます。 「this」を使用すると、コードがより良くなり、問題はありません。そのようなポリシーは馬鹿げています(少なくとも、なぜ彼らがその場所にいるのかを人々に伝えさえしない場合)。
「これ」コード内では、コーダーがインテリセンス(または他のIDEの同等物)を使用して重労働を行ったことを常に示唆しています。
確かにこれは有罪ですが、純粋に虚栄のため、後で削除します。
私がそれらを使用する他の唯一の理由は、あいまいな変数を修飾すること(悪い習慣)または拡張メソッドを構築することです
変数の修飾
string name; //should use something like _name or m_name
public void SetName(string name)
{
this.name = name;
}
私としては、 this
を使用してインスタンス化されたオブジェクトのメソッドを呼び出しますが、 self
は静的メソッド用です
VB.NETで使用する一般的な方法の1つは、次のコードです:
Class Test
Private IntVar AS Integer
Public Function New(intVar As Integer)
Me.Intvar = intvar
End Function
End Class
常にではありませんが、ほとんどはMe / this / selfが非常に便利です。話している範囲を明確にします。
典型的なセッターメソッド(lagerdalekの答えから引用):
string name;
public void SetName(string name)
{
this.name = name;
}
それを使用しなかった場合、コンパイラは、メンバー変数を参照していることを知りません。
this。
を使用すると、メソッドの直接のスコープ外にあるメンバー変数にアクセスする必要があることをコンパイラーに伝えることができます。メンバー変数と同じ名前のメソッド内で変数を作成することは完全に合法です。別のクラスを拡張したクラスのメソッドをオーバーライドすることは完全に合法です。
ただし、スーパークラスのメソッドを引き続き使用する必要がある場合は、 super。
を使用します。 superを使用するよりも悪くありません。プログラマーはコードの柔軟性を高めることができます。
読みやすさを考慮していない限り、変数のアクセシビリティについてのすべてです。
最終的には、常に個人的な選択の問題です。個人的には、次のコーディング規則を使用します。
public class Foo
{
public string Bar
{
get
{
return this.bar;
}
/*set
{
this.bar = value;
}*/
}
private readonly string bar;
public Foo(string bar)
{
this.bar = bar;
}
}
だから私にとって" this"コンストラクタを読みやすくするために実際に必要です。
編集:まったく同じ例が" sinje"によって投稿されました。上記のコードを書いている間に。
「これ」を頻繁に使用するだけではありません。時々" that"を使用します。
class Foo
{
private string bar;
public int Compare(Foo that)
{
if(this.bar == that.bar)
{
...
など。 "それ"私のコードでは通常、同じクラスの別のインスタンスを意味します。