10

この回答とそのコメントを読みましたが、興味があります: this/ Self/を使用しない理由はありMeますか?

ところで: これが以前に尋ねられた場合は申し訳ありませんが、thisSO で単語を検索することはできないようです。

4

15 に答える 15

9

警告: 以下は純粋に主観的な回答です。

this/self/me を使用しない最善の「理由」は簡潔だと思います。それがすでにメンバー変数/関数である場合、なぜ重複してプレフィックスを追加するのですか?

個人的には、コンパイラの特定の式を明確にする必要がない限り、this/self/me の使用を避けています。多くの人がこれに同意しませんが、私が働いたどのグループでも、それが本当の障害になったことはありません.

于 2008-12-02T08:08:23.327 に答える
8

一般的なシナリオのほとんどは、既に引用した 2 つの投稿でカバーされていると思います。主に簡潔さと冗長性と明確さ - マイナーな追加: C# では、現在の型の "拡張メソッド" にアクセスするために "this" を使用する必要があります - つまり

this.Foo();

whereFoo()は外部で次のように宣言されています。

public static void Foo(this SomeType obj) {...}
于 2008-12-02T08:09:22.607 に答える
5

次の C# の例のように、場合によっては明確になります。

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}
于 2008-12-02T08:23:19.757 に答える
3

すべてのルールをオンにして StyleCop を使用すると、それを挿入する必要がありますthis.。これを使い始めてから、コードが読みやすくなりましたが、それは個人的な好みです。

于 2008-12-02T09:54:27.327 に答える
2

これは問題ではないと思います。コードの可読性が向上するだけで、これは良いことです。

PHP などの一部の言語では、クラス フィールドまたはメソッドを使用する必要がある場合、 $this-> を前に付けることが必須です。

PHP がそれなしでクラス メンバーを参照する何らかの方法を持っていた場合、一部の行が本来よりも不必要に長くなるという事実は好きではありません。

于 2008-12-02T08:24:30.440 に答える
2

個人的にthis.whateverは読みにくいと思います。2 行のメソッドでは違いに気付かないかもしれませんが、クラス内のすべての場所にthis.variable到達するまで待ちます。this.othervariable

this.さらに、嫌われていたハンガリー語表記の一部の代替としての使用が見出されたと思います。一部の人々は、変数がクラス メンバーであることを読者が理解するのがより明確であることを発見しthis.、トリックを行いました。しかし、さらに明確にする必要がある場合、なぜ自分自身をだまして、昔ながらの"m_"、または単にそのために使用しないのでしょうか? "_"5 文字対 2 (または 1) です。タイピングが減り、同じ結果になります。

そうは言っても、スタイルの選択は依然として個人的な好みの問題です. コードを変更するのに役立つ特定の方法でコードを読んでいた人を説得するのは困難です。

于 2008-12-02T08:26:25.537 に答える
2

まあ、Eclipseはフィールド、引数、ローカル変数を異なる色で色付けするので、少なくともEclipse環境で作業する場合、フィールドを構文的に区別して、自分自身と将来の世代のために特別に「フィールド」としてマークする必要はありません。

于 2008-12-02T08:27:12.417 に答える
1

「Javaの変数」のコンテキストで、実際に以前に尋ねられました:

Java でインスタンス変数の前に「this」を付けますか?

主な再発の理由は次のようです。

「コードの意味を見つけるためにふるいにかける必要がある視覚的なノイズが増えます。」

読みやすさ、言い換えれば... 私は購入しませんが、this.非常に便利です。

于 2008-12-02T08:05:46.093 に答える
1

それは私にはナンセンスに聞こえます。'this' を使用すると、コードがより適切になる可能性があり、問題はないと思います。そのようなポリシーはばかげています (少なくとも、なぜそれが実施されているのかを人々に伝えていない場合)。

于 2008-12-02T08:07:04.500 に答える
0

「これ」をよく使うだけじゃない。私は時々「あれ」を使います。

class Foo
{
    private string bar;

    public int Compare(Foo that)
    {
        if(this.bar == that.bar)
        {
            ...

等々。私のコードの「それ」は通常、同じクラスの別のインスタンスを意味します。

于 2008-12-02T11:28:57.463 に答える
0

私の場合this、インスタンス化されたオブジェクトのメソッドを呼び出すのに使用しますselfが、静的メソッド用です

于 2008-12-02T08:13:47.560 に答える
0

最終的には常に個人の選択の問題です。個人的には、次のコーディング規約を使用しています。

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」によって投稿されました。

于 2008-12-02T08:25:28.223 に答える
0

'これ。' in code は常に、コーダーがインテリセンス (または他の IDE に相当するもの) を使用して重労働を行っていることを示唆しています。

私は確かにこれに罪を犯していますが、純粋に虚栄心の理由から、後でそれらを削除します.

私がそれらを使用する他の唯一の理由は、あいまいな変数を修飾する (悪い習慣) か、拡張メソッドを構築することです。

変数の修飾

string name; //should use something like _name or m_name

public void SetName(string name)
{
     this.name = name;
}
于 2008-12-02T08:38:17.527 に答える
0

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 は非常に便利です。話している範囲を明確にします。

于 2008-12-02T09:19:23.497 に答える
0

典型的なセッターメソッド(lagerdalekの回答から抜粋):

string name;

public void SetName(string name)
{
     this.name = name;
}

これを使用しないと、コンパイラはメンバー変数を参照していることを認識できません。
の使用はthis.、メソッドの直接のスコープ外にあるメンバー変数にアクセスする必要があることをコンパイラーに伝えることです。メソッド内でメンバー変数と同じ名前の変数を作成することは完全に合法であり、別のクラスを拡張したクラスでメソッドをオーバーライドすることは完全に合法です。
ただし、それでもスーパークラスのメソッドを使用する必要がある場合は、これを使用するのがsuper.私の意見です。super を使用するよりも悪くありません。また、プログラマはコードの柔軟性を高めることができます。

私が懸念している限り、可読性はそれに含まれていません。それはすべて、変数のアクセシビリティに関するものです。

于 2008-12-02T10:19:39.677 に答える