Frage

Ich lese diese Antwort und seine Kommentare und ich bin neugierig: gibt es Gründe für die Nichtnutzung this / Self / Me

BTW:. Es tut mir leid, wenn dies zuvor gestellt wurde, scheint es, dass es unmöglich ist, für das Wort this auf SO suchen

War es hilfreich?

Lösung

. Achtung: Rein subjektive Antwort unten

Ich denke, der beste „Grund“ für nicht mit diesem / Selbst / me Kürze ist. Wenn es bereits eine Membervariable / Funktion warum dann redundant das Präfix hinzufügen?

Persönlich vermeide ich die Verwendung dieses / Selbst / me, es sei denn es ist notwendig, einen bestimmten Ausdruck für den Compiler eindeutig zu machen. Viele Menschen nicht einverstanden mit diesem, aber ich habe noch nie hatte es ein echter Knackpunkt in jeder Gruppe sein, für die ich gearbeitet habe.

Andere Tipps

Ich denke, die meisten gängigen Szenarien in den beiden Pfosten abgedeckt wurden bereits zitiert; hauptsächlich Kürze und Redundanz vs Klarheit - eine kleine Ergänzung: in C #, ist es erforderlich, „dies“ zu verwenden, um eine „Extension-Methode“ für den aktuellen Typen zuzugreifen - das heißt

.
this.Foo();

Dabei gilt Foo() erklärt extern als:

public static void Foo(this SomeType obj) {...}

Sie stellt klar, in einigen Fällen, wie in diesem Beispiel in c #:

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}

Wenn Sie StyleCop mit allen Regeln verwenden auf, es macht Sie die this. setzen in. Seit ich begann finde ich meinen Code besser lesbar ist, aber das ist persönliche Präferenz.

Ich denke, das ein Nicht-Thema ist, weil es nur mehr Lesbarkeit des Codes hinzufügt, die eine gute Sache ist.

Für einige Sprachen wie PHP, es sogar obligatorisch ist mit $ this- Präfix>, wenn Sie Klassenfelder oder Methoden verwenden müssen.

Ich mag nicht die Tatsache, dass es einige Linien unnötig länger macht als sie sein könnten, wenn PHP in gewisser Weise hatte die Teilnehmer ohne es zu verweisen.

Ich persönlich finde, dass this.whatever weniger lesbar ist. Sie können nicht den Unterschied in einer 2-Linien-Methode feststellen, aber warten Sie, bis Sie this.variable bekommen und überall in einer Klasse this.othervariable.

Darüber hinaus denke ich, dass die Verwendung von this. als Ersatz für einen Teil der verhassten ungarischen Schreibweise gefunden wurde. Einige Leute fanden heraus, da draußen, dass es noch deutlicher für den Leser, um zu sehen, dass eine Variable eine Klasse Mitglied ist, und this. haben den Trick. Aber warum sie täuscht und nicht das einfache alte "m_" verwenden oder einfach für die "_", wenn wir die zusätzliche Klarheit brauchen? Es ist 5 Zeichen vs. 2 (oder sogar 1). Weniger tippen, das gleiche Resultat.

gesagt hat, dass die Wahl des Stils noch eine Frage der persönlichen Präferenz. Es ist schwer, jemanden zu überzeugen, verwendete Code in einer bestimmten Weise zu lesen, die nützlich ist, um es zu ändern.

gut, Eclipse tut Farbfelder, Argumente und lokale Variablen in verschiedenen Farben, so dass zumindest in Eclipse-Umgebung arbeiten gibt es keine Notwendigkeit zu syntaktisch Felder, um unterscheiden zu speziell, sie als „Felder“ für sich selbst und Generationen zu prägen.

Es wurde vor der Tat gefragt, in dem "Variable in java" Kontext:

Sie Präfix Sie Ihre Instanzvariable mit ‚this‘ in Java?

Der Haupt rezidivierende Grund scheint zu sein:

  

„Es erhöht die visuellen Rauschen müssen Sie die Bedeutung des Codes zu finden, sichten.“

Ablesbarkeit, in anderen Worten ... die ich nicht kaufen, finde ich this. sehr nützlich.

Das klingt Unsinn zu mir. Mit ‚this‘ kann der Code schöner machen, und ich kann damit keine Probleme sehen. Richtlinien wie das ist dumm (zumindest, wenn man nicht einmal die Menschen sagen, warum sie an Ort und Stelle sind).

'das.' in Code schlägt mir immer, dass der Kodierer Intellisense (oder eine anderes IDE-Äquivalente) verwendet hat ihre schwere Arbeit zu tun.

Ich bin sicher dafür schuldig, aber ich aus rein Eitelkeit Gründen, entfernen Sie sie danach.

Die einzigen anderen Gründe, warum ich sie verwenden, sind eine mehrdeutige Variable (schlechte Praxis) oder bauen eine Erweiterungsmethode zu qualifizieren

Qualifikations eine Variable

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

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

wie für me i verwenden this Methoden eines instanziierten Objekt aufzurufen, während self für eine statische Methode

In VB.NET eine der üblichen Praxis verwende ich die folgenden Code:

Class Test
    Private IntVar AS Integer
    Public Function New(intVar As Integer)
       Me.Intvar = intvar
    End Function    
End Class

Nicht die ganze Zeit, aber meistens Me / das / Selbst ist sehr nützlich. Verdeutlicht den Umfang, die Sie sprechen.

In einer typischen Setter-Methode (von lagerdalek Antwort genommen):

string name;

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

Wenn Sie es nicht verwenden, würde der Compiler nicht wissen, dass Sie auf die Membervariable bezieht wurden.
Die Verwendung von this. ist der Compiler zu sagen, dass Sie eine Membervariable zugreifen - die aus dem unmittelbaren Anwendungsbereich des Verfahrens ist. Erstellen einer Variablen innerhalb einer Methode, die den gleichen Namen wie eine Membervariable vollkommen legal ist, ebenso wie eine Methode in einer Klasse überschreiben, die eine andere Klasse erweitert vollkommen legal ist.
Wenn Sie jedoch nach wie vor der Super-Klasse-Methode verwenden müssen, verwenden Sie super. Meiner Meinung nach diesem. ist nicht schlechter als Super verwenden. und ermöglicht es dem Programmierer mehr Flexibilität in ihrem Code.

Was mich betrifft Ablesbarkeit auch in sie kommt nicht, es geht um Zugänglichkeit Ihrer Variablen.

Am Ende ist es immer eine Frage der persönlichen Wahl. Ich persönlich diese Kodierung Konvention verwenden:

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;
  }
}

Also für mich „dieser“ ist tatsächlich notwendig, den Konstruktor lesbar zu halten.

Edit:. Genau das gleiche Beispiel durch „Sinje“ geschrieben worden, während ich den Code oben schrieb

Nicht nur, dass ich „der“ häufig. Ich benutze manchmal "dass".

class Foo
{
    private string bar;

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

Und so weiter. „Das“ in meinem Code bedeutet in der Regel eine andere Instanz der gleichen Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top