Die meisten Blogs, Tutorials oder Bücher verfügen über private Methoden am Ende einer Klasse / eines Moduls. Ist das die beste Vorgehensweise?
Ich finde es bequemer, private Methoden nach Bedarf zu haben. Beispielsweise:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
Auf diese Weise finde ich den Code besser lesbar, anstatt kontinuierlich auf und ab zu scrollen, was sehr irritierend ist.
Stimmt etwas schrecklich an diesem Ansatz nicht? Ist es nicht nur eine bewährte Methode und etwas anderes, private Methoden im Grunde zu haben?
ruby
conventions
ZX12R
quelle
quelle
private def my_method...end
Antworten:
Aus meiner Sicht ist es die beste Vorgehensweise, nacheinander vorzugehen und Ihre Methoden zu deklarieren, ohne die Sichtweise privat zu halten.
Am Ende können Sie jede Methode privat machen, indem Sie einfach Folgendes hinzufügen:
private :xmethod
Beispiel:
Rechtfertigt dies Ihre Frage?
quelle
Es gibt auch die Möglichkeit,
private
der Methodendefinition seit Ruby 2.1 voranzustellen.Wenn Sie sich die Definition ansehen, wissen Sie sofort, ob eine Methode privat ist, unabhängig davon, wo in der Datei sie definiert ist. Es ist ein bisschen mehr Tippen (wenn Sie nicht automatisch vervollständigen) und nicht alle Ihre
def
s werden gut ausgerichtet sein.quelle
private
nur einmal vor demymethod
funktioniert ebenfalls. Es ist nicht erforderlich, es mehrmals hinzuzufügen.zmethod
ohne hättenprivate
, wäre diese Methode nicht privat. Sie müssen es also wiederholen (zumindest mit Ruby 2.3).Wie andere bereits betont haben, besteht die Konvention darin, private Methoden unter eine private Klasse zu stellen. Sie sollten jedoch wahrscheinlich auch wissen, dass viele Programmierer hierfür eine Methode mit doppeltem Einzug (4 Leerzeichen anstelle von 2) verwenden. Der Grund dafür ist, dass Sie in Ihrem Texteditor häufig nicht "privat" sehen und davon ausgehen, dass sie öffentlich sein könnten. Siehe unten für eine Illustration:
Diese Methode sollte verhindern, dass Sie nach oben und unten scrollen müssen, und andere Programmierer in Ihrem Code komfortabler machen.
quelle
begin..end
direkt nachprivate
. Dann kann der Einzug vom Editor automatisch gesetzt werden, da der Code innerhalb desbegin
(im obigen Beispiel) semantisch mit 4 Leerzeichen eingerückt ist.public
und dannprivate
Ich denke, dass öffentliche Methoden eine Art Schnittstelle des Objekts sind, und es ist logisch, sie an der prominentesten Stelle zu platzieren, dh oben in der Datei.
quelle
Sie müssen nicht jede Methode
public
oderprivate
darüber setzen . Normalerweise setze ich alle meine privaten Methoden am Ende meiner Klasse ein. Sie müssen auch nicht explizit angebenpublic
, dass Methoden standardmäßig öffentlich sind. Beispielsweise:quelle
Ich komme aus dem Java-Hintergrund und ich hasse es, scrollen zu müssen, um den Methodentyp zu sehen. Ich finde es verrückt, dass man ohne Hässlichkeit keine Sichtbarkeit von Methoden pro Methode festlegen kann. Also habe ich
#private
vor jeder Saugmethode einen Kommentar eingefügt und dann erklärtprivate :...
.quelle
private def method...
schöner machenIch mag es nicht, für jede Methode öffentlich oder privat angeben zu müssen. Wenn ich alle privaten Methoden nach unten setze, kann ich eine einzelne Instanz von "privat" pro Datei haben. Ich denke, es ist Geschmackssache.
quelle
Ein Stil ist zu Gruppenmethoden zusammen , so dass Sie nur verwenden
private
undprotected
einmal pro Klasse höchstens. Ein anderer Stil besteht darin, die Sichtbarkeit direkt nach der Methodendefinition anzugeben:Ab Ruby 2.1.0 wird
def
der Methodenname als Symbol zurückgegeben, sodass ein optimierterer Stil möglich ist:(Beachten Sie, dass wir
private_class_method
für Klassenmethoden verwenden - sonst würden wirNameError: undefined method
seitdem bekommenprivate
erwartet eine Instanzmethode Selbst wenn es als ein Makro wie im ursprünglichen Beispiel unter Verwendung von nur sie die Sichtbarkeit von Instanzmethoden beeinflusst..)Ich mag diesen Inline-Sichtbarkeitsstil am besten, da Sie damit Methoden nach Ihren Wünschen organisieren können. Es verringert das Risiko, eine neue Methode am falschen Ort hinzuzufügen und sie versehentlich privat zu machen.
Die Syntax der Klassenmethode kann stattdessen folgendermaßen behandelt werden:
quelle
private_class_method
Anruf bereits erwähnt habe, und der letzte Teil über die Verwendung desclass << self
Blocks, um zu vermeiden, dass er verwendet werden muss, ist ein guter Tipp. Bis jetzt wusste ich nicht, dass "nornale" Klassenmethoden (deklariert mitdef self.foo; end
statt vonclass << self; def foo; end
nicht vomprivate
Spezifizierer beeinflusst werden würden.Dennis hatte die perfekte Antwort, dh wenn Sie ruby> = 2.1 verwenden, stellen Sie dem def einfach private (oder geschützte, öffentliche) voran.
Aber ich glaube, dass es jetzt auch möglich ist, privat als Block zu verwenden, wie in:
quelle
Im Allgemeinen bestelle ich meine Methoden wie folgt:
private
, nur einmal geschriebenIch verwende in meinem Editor die Funktionen "Zur Definition gehen", damit nicht viel gescrollt wird. Wenn die Klasse groß genug ist, dass das Scrollen problematisch wird, sollte sie wahrscheinlich in mehrere Klassen unterteilt werden.
quelle
to_s
) gegen Ende des öffentlichen Abschnitts platziere.