Lerne mehr über Ruby on Rails mit Martin Labuschins
Ruby on Rails Link Library.
Klassen und Methoden
Klassen (in Rails werden das wohl meist die Models sein) beginnt man immer mit Großbuchstaben und hält sich an die Konvetion Singularform und ggf. CamelCase.
- Article
- Category
- ProductReview
Methoden
Methoden sind Aktionen die sich direkt auf Klassen oder deren Objekte anwenden lassen und werden mit Punkt davon getrennt.
Mathias Karstädt hat mit hierfür eine Erklärung mit einem Beispiel aus der praktischen Welt zukommen lassen:
Nehmen wir an du hast ein Auto (das Objekt) und willst es starten (das wäre die Methode), Gas geben (Methode) oder die Geschwindigkeit vom Tacho ablesen (Methode). Eine Methode führt also eine Aktion auf das Objekt aus, ändert dessen Zustand oder gibt Informationen zu dessen Zustand zurück.
Artikel.new # gibt ein neues Artikel-Objekt an "Ein String".upcase # gibt den String komplett in Großbuchstaben zurück sortieresarray = [1,3,5].sort # gibt den Array sortiert zurück
Einige Anwendungen von Methoden
Die Methoden ändern selten das Object selbst. Wenn das aber der Fall sein sollte, werden sie konventionell mit einem Ausrufezeichen gekennzeichnet.
string1 = "ein toller string" string2 = String.new # Hier wird nun capitalize auf string1 angewendet ohne es zu ändern. string2 = string1.capitalize puts string1 # gibt "ein toller string" zurück puts string2 # gibt "Ein toller string" zurück # Hier wird nun capitalize! angewendet, welches das Objekt selbst ändert (aber auch einen Rückgabewert hat) string1.capitalize! puts string1 # gibt "Ein toller string" zurück
Unterschied zwischen Methoden mit und ohne Ausrufezeichen
Methoden lassen sich beliebig aneinander ketten, da jede ein eigener Ausdruck ist.
# Schreibe den ersten Buchstaben groß, ersetze "toll" mit "super" und hänge noch einen Satz hinten dran.
"ich bin toll!".capitalize.gsub("toll","super") + " Das ist der Hammer oder?"
Aneinanderkettung von Methoden
Das Plus ist übrigens einer der wenigen Methoden, die auf viele Objekte anwendbar sind (Integer, String, Array) und keinen Punkt benötigen und sogar mit Leerzeichen vom Objekt getrennt werden können.
Variablen
Variablen können in der Programmierung - wie in der Mathematik - als Platzhalter angesehen werden. Technisch gesehen sind sie Speicherbelegungen für Werte. Sie enthalten also Werte aller Art (sind also "typenlos") und können innerhalb Ihres Gültigkeitsbereichs eingesehen, überschrieben und bearbeitet werden.
Gerade in Ruby on Rails sind meist nur zwei Variablentypen anzutreffen: lokale Variablen und Instanzvariablen.
Lokale Variablen sind nur innerhalb einer Methode bekannt und werden danach wieder verworfen.
In den Actions des Controllers werden die dynamischen Inhalte, die in den Views angezeigt werden sollen, ermittelt und in Instanzvariablen gespeichert, auf die die Views zugreifen können.
Weitere Informationen über Variablen, Ihre Namenskonventionen und Gültigkeitsbereiche in Ruby sind in einem früheren Artikel hier im Blog zu finden.
Parameter und Symbole
Parameter sind Daten, die man einer Methode übergeben kann. Im letzten Code-Beispiel habe ich bereits Parameter verwendet.
"ich bin toll!".gsub("toll","super")
Parameterübergabe
Gerade wenn man Methoden verschachtelt (also Methoden mit Parametern als Parameter anderer Methoden übergibt) oder aneinander hängt, sind Klammern für die Inneren Notationen Pflicht. Ansonsten kann man die Klammern getrost weglassen.
Product.find 1 # problemlos möglich
link_to "Hallo Welt", Product.find 1 # nicht möglich
link_to "Hallo Welt", Product.find(1) # problemlos möglich (in meinen Augen die eleganteste Lösung)
link_to("Hallo Welt", Product.find(1)) # die äußere Klammer ist hier wieder überflüssig aber trotzdem noch vollkommen korrekt
Parameterübergabe mit Verschachtelungen
Vieler der von Rails stammenden Methoden arbeiten mit Symbolen (und Hashes), um die Parameterangabe und -reihenfolge flexibler zu gestalten. Symbole eignen sich z. B. als Bezeichner für Parameterangaben und werden mit einem Doppelpunkt davor notiert. Das Beste Beispiel ist hier die find-Methode, die jedes Model automatisch besitzt:
Product.find :all, :conditions => { :released => true }, :limit => 25, :group => :company_id
#ist dasselbe wie
Product.find :all, :limit => 25, :group => :company_id, :conditions => { :released => true }
Parameterübergabe mit Verschachtelungen
Wie diese Handhabung nun intern in der Methode (in diesem Fall find) umzusetzen ist, ist keine Frage, die jetzt schon beantwortet werden muss. Später mehr. Weitere Informationen zu Symbolen sind von Cypher sehr nett zusammengefasst worden.
Blöcke und Argumente
Blöcke sind eine Menge von Anweisungen, die (bis auf wenige Ausnahmen, wie z. B. if-Blöcke) in geschweiften Klammern (eher unüblich) oder einem do-end-Paar (das ist üblich) gruppiert werden. Blöcke können nur direkt auf Methoden folgen, die einen Block unterstützen.
5.times do puts "hello" end if 1 == 1 puts "1 ist gleich 1" end
Zwei einfache Beispiele für Blöcke
Argumente sind sozusagen Variablen, die für den Block selbst hergestellt werden. Eine Zählervariable wäre hier ein gutes Beispiel:
10.times do |i| "Durchlauf Nummer " + i.to_s # in i steht, wie weit der Zähler schon ist. Dafür sorgt die times-Methode der Klasse Integer. end
10.times wiederholt den übergebenen Block 10 mal
Wenn man ein Array mit der each-Methode durchläuft, kann man das aktuelle Element auch mit einem Argument abfragen:
[1,3,5,2].each do |i| puts "Ich bin eine " + i.to_s end
Einen Array durchlaufen und das aktuelle Element erfahren
Weiterlesen
Folgende Artikel, die ich vor einer Weile geschrieben habe eignen sich zum Weiterlesen.
blog comments powered by Disqus