[RUBY] Informationen zum Benennen von Rails-Modellmethoden

Einführung

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.

TL; DR (Modellausgabe)

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.

Einzelheiten

Bereichsname

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

Typisches Beispiel

Modellname. Verb + ing oder Modellname. Vergangene partizipative Verbform

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.

Modellname. Präfix + Nase

Shop.without_blue_roof
Devil.in_the_prada
Man.with_the_machine_gun

Modellname. Adjektiv

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)

Nutzloses Muster

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.

Methodenname

Die Denkweise ist sehr unterschiedlich, je nachdem, ob die Methode eine Aktion (Änderung von Variablen usw.) oder eine Methode ohne Aktion beinhaltet.

Methode mit Aktion

"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.

Methode ohne Aktion

Prädikatmethoden

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.

Verweigerungsmethode des Bewertungssystems

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.

Eine Methode, die keine Wirkung hat, aber nicht beurteilt

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

Variablennamen

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

Erwägung

Ruby-Sprachspezifikation

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.

Grundlagen der englischen Grammatik

Es ist bekannt, dass die englische Grammatik grundsätzlich in die folgenden fünf Satzmuster eingeteilt ist.

  1. S+V
  2. S+V+C
  3. S+V+O
  4. S+V+O+O
  5. S+V+O+C

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.

Ausdruckskraft, die objektorientierte Sprachen abdecken sollten

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?

Muster des ersten Satzes: S + V.

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.

Muster des zweiten Satzes: S + V + C.

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.

Muster des dritten Satzes: S + V + O.

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.

Muster des vierten Satzes: S + V + O1 + O2

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

5. Satzmuster: S + V + O + C.

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."

Zusammenfassung

Ich weiß es nicht, weil es kompliziert ist. Der Text ist unkoordiniert geworden.

Referenzierte Seite

Objekt ist das Objekt How To Name Variables And Methods In Ruby

Recommended Posts

Informationen zum Benennen von Rails-Modellmethoden
Über Schienen 6
Namenskonventionen für Schienenmodelle und Tabellen
Informationen zum Rails-Routing
[Rails] Informationen zu Namenskonventionen
Über singuläre Methoden
Über die Methode von HttpServlet ()
[Rails] Über ActiveJob!
[Rails] Model Association (Vereinigung)
Über Rails Controller
Über Ruby-Methoden
[Rails] Informationen zu Migrationsdateien
[Schienen 6] Über die wichtigsten Edelsteine
Informationen zur Versionsspezifikation für Schienen
Informationen zu Ruby-Instanzmethoden
Informationen zum Aufrufen von Instanzmethoden
[Schienen] Standardwerte festlegen
Schienen Starke Parameter
[Anfänger] Über Rails Session
Informationen zu Validierungsmethoden in JUnit
Schienenpfad und URL-Methoden
Schienen g Modell Gesamtdurchfluss
[Rails] Informationen zur Struktur des scss-Ordners
Über die Zupfmethode und die ID-Methode
Java-Klasse Variable Klassenmethode
[Rails] Informationen zum Rspec-Antworttest
Über Ruby und Objektmodell
Über Rails Scraping-Methode Mechanisieren
Benennungsregeln beim Erstellen neuer Controller und Modelle mit Schienen
Über häufig verwendete Methoden in der Entwicklung
Informationen zu statischen und nicht statischen Java-Methoden
Informationen zu den Methoden equals () und hashcode ()
Über das Symbol <%%> in Rails erb
[Rails] Über die Implementierung der Like-Funktion
[Für unsere Neulinge] Über isXXX-Methoden
[Rails] Über die Hilfsmethode form_with [Basic]
Überlegungen zu Schienen und sauberer Architektur
Ruby-Methoden, die häufig in Rails verwendet werden