2008-12-02 12 views

Antwort

9

Warnung: Rein subjektive Antwort unten.

Ich denke, der beste "Grund" für die Verwendung dieses/self/me ist die Kürze. Wenn es bereits eine Mitgliedsvariable/Funktion ist, warum dann das Präfix redundant hinzufügen?

Persönlich vermeide ich die Verwendung von/self/me, es sei denn, es ist notwendig, einen bestimmten Ausdruck für den Compiler zu disambiguieren. Viele Leute stimmen dem nicht zu, aber ich habe nie in irgendeiner Gruppe, in der ich gearbeitet habe, einen echten Knackpunkt gehabt.

+0

Subjektiver Kommentar: Entfernen Sie aus diesem Grund auch Zeilenumbrüche in Ihrem Code? Sie sollten Code so schreiben, dass er zuerst von Menschen lesbar ist, und dann als zweite Priorität maschinenlesbar. –

+0

@ Torbjørn: Was ist, wenn er dieses/self/mich/mehr menschlich lesbarer findet? –

+0

Ich finde es besser lesbar. Ich füge Elementvariablen mit m _/_ voran und finde, dass das Lesen von this.m_foo nicht mehr lesbar ist als m_foo. m_ bedeutet Mitglied, warum also das zusätzliche Gepäck hinzufügen? – JaredPar

1

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

„es das visuelle Rauschen Sie benötigen erhöht:

Do you prefix your instance variable with ‘this’ in java ?

Der Haupt rezidivierende Grund zu sein scheint durchzuschauen, um die Bedeutung des Codes zu finden. "

Lesbarkeit, mit anderen Worten ... die ich nicht kaufe, finde ich this. sehr nützlich.

1

Das klingt wie Unsinn für mich. Die Verwendung von 'this' kann den Code schöner machen, und ich sehe keine Probleme damit. Solche Policies sind blöd (zumindest wenn man den Leuten nicht einmal sagt, warum sie da sind).

8

Ich denke, die meisten der üblichen Szenarien wurden in den beiden bereits genannten Posts behandelt; hauptsächlich Kürze und Redundanz vs Klarheit - eine geringfügige Zugabe: in C#, ist es erforderlich, „this“ zu verwenden, um eine „extension method“ für den aktuellen Typen zuzugreifen - dh

this.Foo(); 

wo Foo() deklariert wird extern als :

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

wie für mich i this verwenden Methoden eines instanziierten Objekts aufrufen, während self für eine statische Methode ist

+0

In welcher Sprache? –

+0

PHP, dies gilt auch für Java, aber anstelle von Selbst, ist der Klassenname selbst das Präfix – ken

5

es in einigen Fällen verdeutlicht, wie dieses Beispiel in C#:

+0

Aber wäre das nicht ein Grund, es zu verwenden? (Und nicht NICHT, um es zu benutzen?) –

+1

Es wäre ein Grund, den Parameter umzubenennen;) – boutta

+0

Ich stimme zu, der Parameter sollte umbenannt werden :) Aber es zeigt immer noch, wie das ist. hilft zu verstehen, dass es sich um die private Variable der Klasse handelt und nicht um den Parameter, auf den verwiesen wird. @daniel: Ja, das war mein Punkt. In diesem Beispiel wäre es sinnvoll, dies zu verwenden. –

2

Ich denke, das ist kein Problem, weil es dem Code nur mehr Lesbarkeit hinzufügt, was eine gute Sache ist.

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

Ich mag nicht die Tatsache, dass es einige Zeilen unnötig länger macht, als sie sein könnten, wenn PHP eine Möglichkeit hätte, Klassenmitglieder ohne es zu referenzieren.

0

Am Ende ist es immer eine Frage der persönlichen Entscheidung.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 „dieses“ ist tatsächlich notwendig, den Konstruktor lesbar zu halten.

Edit: das genaue gleiche Beispiel wurde von "Sinje" geschrieben, während ich den Code oben schrieb.

+0

ein Setter für ein "readonly" -Feld ... Uh oh. –

+0

Danke, kommentierte der Setter. Das tue ich zwar nicht im wirklichen Leben, nur ein kleiner Denkfehler beim Nachdenken über ein Beispiel ;-) Hier geht es aber nicht wirklich darum - das Beispiel geht um die Zeile "this.bar = bar". – user39603

2

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

Außerdem denke ich, dass die Verwendung von this. als Ersatz für einen Teil der viel verhassten ungarischen Notation gefunden wurde. Einige Leute da draußen fanden heraus, dass es für den Leser noch klarer ist zu sehen, dass eine Variable ein Klassenmitglied ist, und this. hat den Trick gemacht. Aber warum täuschen wir uns und benutzen nicht die einfache alte "m_" oder einfach "_" dafür, wenn wir die extra Klarheit brauchen? Es ist 5 Zeichen gegen 2 (oder sogar 1). Weniger tippen, gleiches Ergebnis.

Dennoch ist die Wahl des Stils immer noch eine Frage der persönlichen Präferenz. Es ist schwer jemanden davon zu überzeugen, Code in einer bestimmten Weise zu lesen, die nützlich ist, um ihn zu ändern.

+0

I würde "m_", wie 5 Fingerbewegungen zählen :) 1) 'm' 2) 3) '_' 4) an linken Finger nach Hause zurückkehren Tasten 5) zurück zur rechten Finger Grundstellungstasten Ich könnte sogar selbst "dieses" tippen. schneller als "m_". : D Und es hat den Vorteil, Intellisense in anderen IDEs als Visual Studio aufzurufen. –

+0

Sie haben Recht mit Fingerbewegungen. Ich persönlich bevorzuge die Verwendung von plain _, das kürzer ist. Apropos: Ich erinnere mich an eine schöne Visual Assist Feature aus den guten alten C++ Tagen - Eingabe von "m" dann "Shift" würde automatisch "m_" einfügen. –

2

Nun, Eclipse macht Farbfelder, Argumente und lokale Variablen in verschiedenen Farben, so dass man zumindest in der Eclipse-Umgebung Felder nicht syntaktisch unterscheiden muss, um sie als "Felder" für sich und zukünftige Generationen zu markieren .

1

'dies.' im code schlägt mir immer vor, dass der coder intellisense (oder andere IDE-äquivalente) benutzt hat, um schwer zu heben.

Ich bin sicherlich schuldig, aber ich tue es aus rein Eitelkeitsgründen, sie danach zu entfernen.

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

Qualifikation eine variable

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

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

In VB.NET eine der üblichen Praxis ich bauen Verwenden Sie den 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 vor allem Ich/das/Selbst ist sehr nützlich. Verdeutlicht den Umfang, über den Sie sprechen.

3

Wenn Sie StyleCop mit allen Regeln verwenden, werden Sie die this. in setzen. Seit ich es benutze finde ich meinen Code ist lesbarer, aber das ist persönliche Vorliebe.

0

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. soll dem Compiler mitteilen, dass Sie auf eine Membervariable zugreifen müssen - was außerhalb des unmittelbaren Bereichs der Methode liegt. Das Erstellen einer Variablen innerhalb einer Methode, die den gleichen Namen wie eine Membervariable hat, ist vollkommen legal, genauso wie das Überschreiben einer Methode in einer Klasse, die eine andere Klasse erweitert hat, völlig legal ist.
Wenn Sie jedoch immer noch die Super-Klasse-Methode verwenden müssen, verwenden Sie super. Meiner Meinung nach mit diesem. ist nicht schlechter als mit super. und erlaubt dem Programmierer mehr Flexibilität in seinem Code.

Soweit es mich betrifft, Lesbarkeit kommt nicht einmal in es, es geht um Barrierefreiheit Ihrer Variablen.

0

Nicht nur verwende ich häufig "das". Ich benutze manchmal "das".

class Foo 
{ 
    private string bar; 

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

Und so weiter. "Das" in meinem Code bedeutet normalerweise eine andere Instanz derselben Klasse.