In Bezug auf die Benennung von Rails gibt es viele Beschreibungen für Modell, Controller und Tabellen, aber es scheint, dass nicht viel über Methodennamen, Variablennamen und Bereichsnamen geschrieben wurde.
Gute oder schlechte Namen haben einen großen Einfluss auf die Lesbarkeit des Codes, aber andererseits geben wir, die wir nicht gut Englisch können, oft blutige Namen und häufen oft technische Schulden an.
Erstens hat Ruby eine Sprachspezifikation, die sich des englischen Schreibgeschmacks bewusst ist ("poi" bis zuletzt), daher denke ich, dass Methodennamen, Variablennamen und Bereichsnamen in gewissem Maße dieser Art folgen sollten. Daher habe ich die Richtlinien, denen diese Benennung folgen sollte, überdacht.
Ich werde es auf verschiedene Arten schreiben, daher möchte ich es unterteilen. Dieses Mal habe ich darüber nachgedacht, die Methode, den Umfang und die (kleine) Variable des Modells zu benennen, aber ich werde zu einem späteren Zeitpunkt über den Controller nachdenken.
Ziel benennen | Format |
---|---|
Umfang | "Adjektiv (Phrase)","Präposition_Substantiv","Vibration ing","Vergangene partizipative Verbform" |
Methode mit Aktion | "Anderes Verb" → Das Objekt des anderen Verbs sollte das Empfängerobjekt sein! |
Beurteilungsmethode | "Adjektiv (Phrase)?」,"Präposition_Substantiv?」,"Vibration ing?」,"Vergangene partizipative Form des Verbs?」 |
Methode, die keine Wirkung hat | "Nomenklatur (Phrase)" → Kann als Eigenschaft verwendet werden |
Methode zum Transformieren des Objekts selbst | 「to_Substantiv" |
Variable | "Nomenklatur (Phrase)" |
Variablen (Ausnahmen) | "Vergangene partizipative Form des Verbs_Präposition(_Nomenklatur) ”→ Vermeiden Sie, wenn Sie es vermeiden können |
Achten Sie auf den Teil des Wortes, den Sie verwenden. Und das Wichtigste ist, die Bedeutung zu lesen und zu verstehen.
Sollte ein Adjektiv oder eine Adjektivphrase sein. Der Bereichsname qualifiziert den Modellnamen nach. Verwenden Sie den Bereich "what" von "what OO" als Bereichsnamen. Der Modellname wird in 〇〇 eingegeben.
Wenn der Bereich so benannt wird, dass er mit einer Adjektivphrase nachmodifiziert wird, wird die englische Grammatik auch dann nicht unterbrochen, wenn der Bereich verkettet ist.
Book.in_sale.published_by("O'Reilly")
← Book (which is) in sale published by O'Reilly
Shop.selling_books #Geschäfte, die Bücher verkaufen
Task.not_running #Negativform
Book.published #Partizipative Form der Vergangenheit
Book.published_by("O'Reilly") #Umfang, der auch Argumente benötigt
Book (which is) published by O'Reilly
Es ist ein guter Name, wie eine Nomenklatur auszusehen, bei der das "(was ist)" weggelassen wird.
Shop.without_blue_roof
Devil.in_the_prada
Man.with_the_machine_gun
Mission.impossible
Daemon.alive
Picture.not_displayable
Tower.taller_than(100)
Session.expired #Ergänzung)abgelaufen kann als Adjektiv oder als vergangene partizipative Form eines automatischen Wortes angesehen werden (es gibt keinen großen Unterschied)
Manchmal sehe ich Bereichsnamen im Stil : filtered_xxxx
, aber diese Namen sind redundant, weil die Bereichsfunktionen in erster Linie eingegrenzt sind.
Wir lehnen auch : can_xxxx
ab. Die Beurteilung einer guten Benennung ist, ob das, was als "Modell (welches ist) Bereichsname" weggelassen wurde, wiederbelebt und grammatikalisch reduziert wird oder nicht.
Die Denkweise ist sehr unterschiedlich, je nachdem, ob die Methode eine Aktion (Änderung von Variablen usw.) oder eine Methode ohne Aktion beinhaltet.
"Was tun" mit "Subjekt (Anruferobjekt)" als "Objekt (Empfänger)". Der Teil "Was ist zu tun?" Ist der Methodenname. Infolgedessen ändert es irgendwie den Status interner Variablen, wirkt auf externe Objekte und greift auf externe Dienste zu.
cow.grow # <= I grow up the cow.Infolgedessen Kuh.Das Alter wird erhöht und so weiter.
file.delete # <= I delete the file.Infolgedessen verschwindet die Datei im externen Dateisystem (für das Programm).
job.perform # <= I perform the job.
Manchmal sehe ich Methoden, bei denen der Empfänger (Objekt) das Subjekt ist, aber es ist nicht gut. Es mag für einen Moment gut aussehen, aber auf lange Sicht ist es nicht mehr objektorientiert und beginnt zusammenzubrechen.
#schlechtes Beispiel
manager.evaluate(member) # <=Ein Manager bewertet sein Mitglied so wie es ist.
Beurteilungsbasierte (nicht handelnde) Methoden, die "wahr" oder "falsch" zurückgeben, haben einen deutlich anderen Benennungsansatz als normale (handelnde) Methoden. Nur in diesem Fall wird der Empfänger als Subjekt behandelt.
Zum Beispiel die Anweisung, die bestimmt, ob sich der "Shop" im Status "Offen" befindet
shop.open? # <= Is the shop open?
In anderen Sprachen machen wir oft Beurteilungsmethoden mit dem Kleber mit dem Verb shop.is_open
.
In Ruby / Rails wird das Verb be normalerweise weggelassen und am Ende ein ?
Hinzugefügt. Ich denke, dass es eine Kultur ist, die der Sprachspezifikation eigen ist, dass "?" Verwendet werden kann, und in erster Linie wird "S + V + C" zu "V + S + C?". Es gibt also ein "ist zwischen dem Subjekt und dem Komplement". `Tritt nicht ein.
Nur im Fall einer Beurteilungsmethode muss der Methodenname "komplementär" sein. (S = Objekt, V = weggelassen, C = Methodenname) → Ähnlich wie bei der Benennung von Bereichen basiert es auf "Adjektion?", "Präfix + Nase?", "Vibration + Ing?" Oder "Vergangenheit partizipative Verbform?".
Gibt es "can_xxx" oder "can_be_yyy"? Ich denke, es ist am besten, dies so weit wie möglich zu vermeiden. Ich werde später darüber nachdenken.
Erstellen Sie nicht so oft wie möglich eine Methode namens "shop.not_open?". Alles was Sie tun müssen, ist "! Shop.open?" Zu schreiben. Wenn die Beurteilungsbedingungen kompliziert werden, nimmt auch die Lesbarkeit der Methode ab. Ich denke, es ist gut, sie so zu gestalten, dass sie in erster Linie nicht die Bedeutung von Verweigerung enthält.
Für Methoden, die nicht "true" / "false" zurückgeben, ist es besser, diejenigen, die als Eigenschaften von außen verwendet werden können, als Eigenschaften zu definieren. Die Benennung zu diesem Zeitpunkt entspricht dem später beschriebenen "Variablennamen".
Wenn Sie das Objekt selbst in ein anderes Format konvertieren möchten, sollten Sie es "to_xxx" nennen. Verwenden Sie nicht convert_to_xxx
.
Zum Beispiel
class Sylinder
attr_accessor :bore, :stroke
def initializer(bore, stroke)
@bore = bore
@stroke = stroke
end
def displacement # <=Weil es den internen Zustand des Objekts nicht beeinflusst:calculate_Verwenden Sie keine Methodennamen wie Verschiebung
(@bore/2) * (@bore/2) * Math::PI * @stroke
end
end
Grundsätzlich möchte ich eine Nomenklatur als Variablennamen verwenden. Variablen sind Attribute, die dem Objekt (oder der Klasse) gehören. Der Attributname ist ein Substantiv. Sie können die Bedeutung eingrenzen, indem Sie vor der Nomenklatur ein Akronym oder eine Besitzbewertung hinzufügen.
user.email
user.first_name
In Ausnahmefällen kann eine Variable, die Zusatzinformationen zu einer Aktion auf dem Objekt enthält, einen Variablennamen in Form der letzten Teilform des Verbs + des Präfixes (+ Nomenklatur) haben. Wenn Sie es ausdrücken können, ohne solche Variablennamen zu verwenden, ist es meiner Meinung nach später leichter zu lesen, wenn Sie es vermeiden.
article.created_at
article.published_by
article.referenced_in_indices
automator.call bob if not bob.awake?
Von der Stelle, an der Sie das Argument der Methode ohne Klammern aufrufen können, und von der Stelle, an der die Schlüsselwörter "not", "und" definiert sind Ursprünglich ist es möglich, in einer natürlichen Sprache ** wie ** mit weniger symbolischer Beschreibung zu schreiben. Der Stress beim Lesen von Code kann reduziert werden, indem Bereiche, Methoden und Variablen so benannt werden, dass der Ausdruck beim Aufrufen wie eine natürliche Sprache aussieht.
Es ist bekannt, dass die englische Grammatik grundsätzlich in die folgenden fünf Satzmuster eingeteilt ist.
Ich denke, die Komponenten des Satzmusters und die entsprechenden Konzepte in der Rails-Programmierung sind wie folgt.
S: Betreff (Hauptteil) → Anrufer (Betreff) V: Verb → Methode O: Objekt (Substantiv) → Empfänger (Objekt mit der Methode) und Methodenargument (im Fall des 4. Satzmusters) C: Ergänzung (Fürsprecher / Zusatz / Adjektivphrase / Zusatzphrase) → Substitutionswert
Das "O" in S + V + O ist das "O" in objektorientiert.
Grundsätzlich scheint es gut zu denken, dass der Methodenaufruf den Satz des dritten Satzmusters ausdrückt. Wird es ansonsten als Zuweisung oder Eigenschaftsänderung implementiert oder wird es durch Konvertieren in das Muster des dritten Satzes implementiert?
Nicht so viel. Dies liegt daran, dass die Objektorientierung ein Paradigma ist, bei dem der Anrufer auf den Empfänger einwirkt, um den Prozess zu implementieren. Ich denke, die einfache Datei.delete () ist tatsächlich das dritte Satzmuster.
file.delete # <= I deletes the file.
Da O (Objekt) nicht angezeigt wird, ist dies auch als Methodenform ein seltener Fall. Wenn ja, denke ich, dass das aufrufende Objekt seiner Eigenschaft etwas zuweisen wird, oder so ähnlich.
Die Variationen von V (Verb), die dieses Satzmuster annehmen, sind wie folgt.
Zustandstyp: sein, schauen, scheinen, erscheinen, behalten, bleiben, lügen Varianten: werden, bekommen, drehen, wachsen, machen, kommen, gehen, fallen Sensorischer Typ: Geruch, Geschmack, Gefühl, Klang Quelle: https://www.eng-builder.jp/learning/sentence-pattern2/
Mit anderen Worten, obwohl sich diese Verben darin unterscheiden, ob sie von Änderungen begleitet werden oder nicht, drücken sie alle aus, dass sich S als Ergebnis im Zustand von C ("S = C") befindet. Bei der Beschreibung dieses Ausdrucks durch Programmierung scheint es in den meisten Fällen möglich zu sein, ihn durch Zuweisen eines Werts zu der Eigenschaft zu realisieren, die den Status des Objekts darstellt.
alice.health = :fine # <= Alice becomes fine.
Das ist leicht zu verstehen. Es scheint am meisten zu sein.
file.delete # <= I delete the file.
window.move_to(100, 300) # <= I move the window to (100, 300).
Ich bin der Meinung, dass das angegebene Argument häufig als Zusatzphrase verwendet wird, um den gesamten Satz zu ändern. Kurz gesagt, das Argument ist ein Parameter, der die Aktion für das Objekt anpasst. Ich bin der Meinung, dass der Parameter in der aufgerufenen Methode const sein sollte, aber ich habe noch nicht darüber nachgedacht.
Die Variationen von V (Verb), die dieses Satzmuster annehmen, sind wie folgt.
give, show, offer, hand, pass, send, teach, tell, pay, lend, do
Als Tendenz ist ersichtlich, dass S bedeutet, O1 O2 zu geben. Wenn ich in objektorientierter Programmierung schreibe, habe ich das Gefühl, dass dies oft durch Zuweisen / Hinzufügen von Eigenschaften ausgedrückt werden kann.
alice.belongings.push book # <= I give Alice a book
alice.give book # <= I give Alice a book
Die Variationen von V (Verb), die dieses Satzmuster annehmen, sind wie folgt.
make, get, keep, leave, think, believe, find, call, name
Es ist ersichtlich, dass alle von ihnen Verben sind, die den Zustand ausdrücken, dass O = C. Ein Verb, das bedeutet zu erkennen, dass "ein Zustand von O C ist" oder "ein Zustand von O C ist", obwohl es einen Unterschied gibt, ob S auf O funktioniert oder nicht. Dies könnte in eine einfachere SVC-Darstellung umgeschrieben werden, wenn nur C und O verwendet werden, wenn versucht wird, sie objektorientiert zu implementieren.
Room.tidiness = :clean # <= I make the room clean.
cat.name = "Tom" # <= I name the cat "Tom."
Ich weiß es nicht, weil es kompliziert ist. Der Text ist unkoordiniert geworden.
Objekt ist das Objekt How To Name Variables And Methods In Ruby
Recommended Posts