この回答とそのコメントを読みましたが、興味があります: this
/ Self
/を使用しない理由はありMe
ますか?
ところで: これが以前に尋ねられた場合は申し訳ありませんが、this
SO で単語を検索することはできないようです。
この回答とそのコメントを読みましたが、興味があります: this
/ Self
/を使用しない理由はありMe
ますか?
ところで: これが以前に尋ねられた場合は申し訳ありませんが、this
SO で単語を検索することはできないようです。
警告: 以下は純粋に主観的な回答です。
this/self/me を使用しない最善の「理由」は簡潔だと思います。それがすでにメンバー変数/関数である場合、なぜ重複してプレフィックスを追加するのですか?
個人的には、コンパイラの特定の式を明確にする必要がない限り、this/self/me の使用を避けています。多くの人がこれに同意しませんが、私が働いたどのグループでも、それが本当の障害になったことはありません.
一般的なシナリオのほとんどは、既に引用した 2 つの投稿でカバーされていると思います。主に簡潔さと冗長性と明確さ - マイナーな追加: C# では、現在の型の "拡張メソッド" にアクセスするために "this" を使用する必要があります - つまり
this.Foo();
whereFoo()
は外部で次のように宣言されています。
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_"
、または単にそのために使用しないのでしょうか? "_"
5 文字対 2 (または 1) です。タイピングが減り、同じ結果になります。
そうは言っても、スタイルの選択は依然として個人的な好みの問題です. コードを変更するのに役立つ特定の方法でコードを読んでいた人を説得するのは困難です。
まあ、Eclipseはフィールド、引数、ローカル変数を異なる色で色付けするので、少なくともEclipse環境で作業する場合、フィールドを構文的に区別して、自分自身と将来の世代のために特別に「フィールド」としてマークする必要はありません。
「Javaの変数」のコンテキストで、実際に以前に尋ねられました:
Java でインスタンス変数の前に「this」を付けますか?
主な再発の理由は次のようです。
「コードの意味を見つけるためにふるいにかける必要がある視覚的なノイズが増えます。」
読みやすさ、言い換えれば... 私は購入しませんが、this.
非常に便利です。
それは私にはナンセンスに聞こえます。'this' を使用すると、コードがより適切になる可能性があり、問題はないと思います。そのようなポリシーはばかげています (少なくとも、なぜそれが実施されているのかを人々に伝えていない場合)。
「これ」をよく使うだけじゃない。私は時々「あれ」を使います。
class Foo
{
private string bar;
public int Compare(Foo that)
{
if(this.bar == that.bar)
{
...
等々。私のコードの「それ」は通常、同じクラスの別のインスタンスを意味します。
私の場合this
、インスタンス化されたオブジェクトのメソッドを呼び出すのに使用しますself
が、静的メソッド用です
最終的には常に個人の選択の問題です。個人的には、次のコーディング規約を使用しています。
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;
}
}
したがって、私にとって「これ」は、コンストラクターを読みやすくするために実際に必要です。
編集:上記のコードを書いているときに、まったく同じ例が「sinje」によって投稿されました。
'これ。' in code は常に、コーダーがインテリセンス (または他の IDE に相当するもの) を使用して重労働を行っていることを示唆しています。
私は確かにこれに罪を犯していますが、純粋に虚栄心の理由から、後でそれらを削除します.
私がそれらを使用する他の唯一の理由は、あいまいな変数を修飾する (悪い習慣) か、拡張メソッドを構築することです。
変数の修飾
string name; //should use something like _name or m_name
public void SetName(string name)
{
this.name = name;
}
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 を使用するよりも悪くありません。また、プログラマはコードの柔軟性を高めることができます。
私が懸念している限り、可読性はそれに含まれていません。それはすべて、変数のアクセシビリティに関するものです。