Ruby-Syntax-Grundlagen für Rails-Einsteiger

Im Rahmen unserer Agentur bereite ich einen Lehrplan für Ruby on Rails vor. Im letzten Artikel habe ich dafür eine Link-Liste für den Einstieg vorgestellt. Hier möchte ich nun die Ruby-Syntax-Grundlagen für Rails-Einsteiger aufzeigen, die man für die ersten Zeilen sicherlich gut gebrauchen kann.

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.

veröffentlicht am 11.03.2009 um 23:00 von Martin Labuschin in ,


blog comments powered by Disqus
The Ruby on Rails Link Library Spanning Sync SEO-Dokumentation Gowalla
ProWebApps WellDone (β) Pinboard (α) Netzwerk Münsterland
Blogs Bücher Frameworks iPhone Mac Web-Apps