Golang steht einem Styleguide am nächsten, der hier unter Empfängernamen zu finden ist:
Der Name des Empfängers einer Methode sollte ein Spiegelbild ihrer Identität sein. häufig genügt eine Abkürzung mit einem oder zwei Buchstaben dieses Typs (z. B. "c" oder "cl" für "Client"). Verwenden Sie keine generischen Namen wie "ich", "dies" oder "selbst", Bezeichner, die für objektorientierte Sprachen typisch sind und bei denen Methoden stärker im Vordergrund stehen als Funktionen. Der Name muss nicht so beschreibend sein wie der eines Methodenarguments, da seine Rolle offensichtlich ist und keinem dokumentarischen Zweck dient.
Ich persönlich habe immer nur "dies" als Kennung verwendet, weil "dies" der Schwerpunkt meiner Arbeit ist, wenn ich die Funktion schreibe und bearbeite. Es klingt richtig und (zumindest für mich) macht es Sinn.
Wenn der Name nicht beschreibend sein muss, seine Rolle offensichtlich ist und keinem dokumentarischen Zweck dient , warum sollte die Verwendung von "dies" verpönt werden?
quelle
Antworten:
Wir müssten den Autor dieses Styleguides fragen, um sicher zu sein, aber ich denke, der Hauptgrund, warum ich ihm zustimme, ist, dass die Verbindung zwischen Struktur und Methode in Go viel lockerer ist als in anderen Sprachen .
Wenn Sie eine Methode wie diese schreiben:
Das ist fast genau das Gleiche wie das Schreiben einer solchen Funktion:
Der einzige Unterschied ist eine geringfügige Änderung der Syntax in der Art und Weise, wie wir die Funktion / Methode aufrufen.
In anderen Sprachen hat die Variable
this
/self
/ Whatever normalerweise einige spezielle Eigenschaften, z. B. die magische Bereitstellung durch die Sprache oder den besonderen Zugriff auf private Methoden (denken Sie daran, dass Go keine privaten Felder / Methoden hat). Obwohl der "Empfänger" bis zu einem gewissen Grad immer noch "magisch bereitgestellt" wird, ist er einem regulären Funktionsargument so ähnlich, dass es wohl nicht zählt.Außerdem werden in "traditionellen" OOP-Sprachen alle struct / class-Methoden mit der struct / class-Definition geliefert, sodass von außen keine weiteren hinzugefügt werden können. Soweit ich weiß, kann in Go jeder mehr Methoden hinzufügen (natürlich im Rahmen seines eigenen Codes).
Ich habe nicht genug Go geschrieben, um meinen eigenen
this
Styleguide zu erstellen , aber ich persönlich würde wahrscheinlich Methoden verwenden, die in derselben Datei wie die Struktur definiert sind, die sie erhalten, und einen aussagekräftigeren Empfängernamen für Methoden, die ich an Strukturen aus anderen Dateien anhänge .quelle
this
aus keinem anderen Grund vermeiden, als mich daran zu erinnern, dass ich nicht in einer traditionellen OOP-Sprache bin.Ich bin nicht von diesem Style Guide überzeugt und ich glaube nicht , alles ist besser als
this
,me
oderself
. Weilthis
,me
oderself
macht es super klar , dass die Variable eine Instanz der Kontext - Struktur. Ich sage nicht, dass eine Strukturvariable mit niedrigerem Gehäuse eine schlechte Idee ist, ich mag nur die Art und Weise,this
die es super klar macht.quelle
this
,me
oderself
“ , wie würden Leser dieser Antwort Hilfe von zwei gegensätzlichen Meinungen zu holen? Betrachten wir bearbeiten es in eine bessere Form ing, zu treffen wie man Antwort RichtlinienDies ist aus einer Perspektive von JavaScript, in
this
der der Compiler eine tatsächliche Schlüsselwortbedeutung hat. Nach meinem Verständnis sollte es jedoch einfach genug sein, diese aus zwei Buchstaben für den Objekttyp zu verwenden. Der Grund für den Unterschied ist, dass es in einem anständig großen Block von zunehmend tieferem asynchronem Code sehr leicht sein kann, falsch zu interpretieren, was "dies" oder der Empfänger in einem tieferen Kontext ist; und es ist möglich, dass es nicht dasselbe Objekt ist.In JavaScript beispielsweise kann ein Steuermodul einen Dialog starten und eine
onLoad
Funktion inline dafür deklarieren . Zu diesem Zeitpunkt kann es für einen anderen Codierer sehr leicht sein, dasthis
Innere falsch zu interpretierenonLoad
, um auf das Steuermodul und nicht auf den Dialog zu verweisen. oder umgekehrt. Dies könnte vermieden werden, wenn das Steuerelement alsctrl
und der Dialog als bezeichnet würdendg
.quelle
this
in Javascript gelten einfach nicht für Go. Ich vermute, deshalb.this
Namen wählen konnte ; Beispielsweise schreiben JS-Codierer häufigvar self = this
, um dieselbe Referenz beizubehalten. Laut Go's Design Guide könnte dies dann die gleichen Verwirrungsprobleme haben und sollte theoretisch eine aussagekräftigere Referenz verwenden.