Wie bei jeder Programmiersprache muss man sich auch bei Ruby mit der grundlegenden Syntax vertraut machen. Ruby hat eine saubere, einfache Syntax die nun anhand einiger Beispiele illustriert wird.

Der Basis Zeichencode von Ruby 1.8.7 basiert auf ASCII. Grossklein Schreibung ist signifikant. example oder Example bedeuten unterschiedliche Sachen. Alle syntaktischen Strukturen in Ruby (ausgenommen Identifier oder Literale) können mit sogenannten Whitespace Zeichen oder Kommentaren angereichert werden. Die Whitespace Zeichen in Ruby sind: Leerzeichen (\s), Tabulator (\t), vertikaler Tabulator (\v), Backspace, Zeilenumbruch (Carriage-Return, \n oder \r\n) und Seitenvorschub(formfeed,\f). Der Zeilenumbruch wird nur als Whitespace interpretiert, wenn der Ausdruck die darauf folgende Zeile auch einschliesst.

Folgende Wörter sind reserviert:

FILE and def end in or self unless
LINE begin defined? ensure module redo super until
BEGIN break do false next rescue then when
END case else for nil retry true while
alias class elsif if not return undef yield

Ein einfaches Beispiel das eine kurze Begrüssung zurückgibt:

   1  
   2  def say_hello(name) 
   3    # Say Hello followed by name
   4    result = "Hello, " + name 
   5    return result
   6  end
   7  
   8  
   9  >> say_hello("Ms. Doe")
  10  => "Hello, Ms. Doe"
  11  >> puts say_hello("Mrs. Doe")
  12  Hello, Mrs. Doe
  13  => nil

Wir haben hier eine einfache Methode definiert, die einen Grusstext gefolgt vom übergebenen Text zurück gibt. Die Methode wird mit dem Keyword def eingeleitet, gefolgt vom Methoden Namen say_hello und den Parametern in Runden Klammern hier (name). Der Methodenkörper wird mit dem Keyword end abgeschlossen. Strichpunkte am Ende einer Zeile sind nicht notwendig, wenn jedes Statement in einer eigenen Zeile steht. Die Einrückung ist nicht signifikant, sollte aber zwei Zeichen gross sein.

Die erste Zeile in der Methode ist ein Kommentar. Dieser wird mit einem # eingeleitet. In der nächsten Zeile wird die Zeichenkette "Hello, " mit dem Wert des Paramters name verbunden und der lokalen Variable result zugewiesen. Schlussendlich wird result an den Aufrufer returniert. Besonders zu beachten ist hier auch, dass die lokale Variable nicht erst definiert werden muss. Sie beginn einfach mit der ersten Zuweisung an zu leben.

   1  say_hello("Ms. Doe")

gibt also den Wert "Hello, Ms. Doe" zurück. Bei der nächsten Zeile wird der Methode puts der Rückgabewert des Methodenaufrufes von say_hello("Mrs. Doe") übergeben. puts gibt diesen Wert einfach auf der Konsole aus. Bei dieser Zeile sieht man auch, dass die Runden Klammern bei einem Methodenaufruf optional sind.

   1  >> puts say_hello("Mrs. Doe")
   2  Hello, Mrs. Doe
   3  => nil
   4  >> puts(say_hello("Mrs. Doe"))
   5  Hello, Mrs. Doe
   6  => nil
   7  >> puts say_hello "Mrs. Doe"
   8  Hello, Mrs. Doe
   9  => nil

Diese drei Aufrufe sind also gleichwertig. Hier sollte man sich einen vernünftigen Mittelweg angewöhnen. Bei einfachen Aufrufen kann man getrost auf die Klammern verzichten. Kompliziertere Aufrufe sollten aber für eine bessere Lesbarkeit geklammert werden (Ihre Kollegen werden Ihnen das danken :). Diese Regel für Klammern gilt selbstverständlich auch bei den Methodendefinitionen. So kann man die Methode say_hello auch wie folgt definieren:

   1  def say_hello name 
   2    "Hello, " + name 
   3  end
   4  
   5  >> say_hello "Adam"
   6  => "Hello, Adam"

In diesem Beispiel kann man noch eine weitere Besonderheit von Ruby sehen: Der letzte berechnete Wert eines Blocks ist immer automatisch der Rückgabewert des Blocks. Man kann also auf das return Statement verzichten, wenn möchte. Aber Achtung! Es ist wirklich darauf zu achten, dass es der letzte Wert ist:

   1  def say_hello name 
   2    puts "Hello, " + name 
   3  end
   4  
   5  >> puts say_hello("Adam")
   6  Hello, Adam
   7  nil
   8  => nil

Hier wird zwar der String "Hello, Adam" in der Methode ausgegeben, das puts bekommt aber den Rückgabewert des Statements puts "Hello, " + name und der ist nil

Man kann die Methode natürlich auch in nur einer Zeile definieren:

   1  >> def say_hello name; "Hello, " + name ;end
   2  => nil
   3  >> puts(say_hello("Eva"))
   4  Hello, Eva
   5  => nil

Wie man aber unschwer erkennen kann ist das alles andere als lesbar und sollte nur in wirklichen Ausnahmefällen gemacht werden!

Ruby Namen

Im vorangehenden Beispiel haben wir schon ein paar Regeln für Namen in Ruby angewendet. Hier nun eine kleine Zusammenfassung dieser Regeln. Manche der Regeln für Namen sind für Teile der Sprache die wir noch nicht kennengelernt haben, dazu kommen wir noch in späteren Blog Artikeln.

In Ruby entscheidet das erste Zeichen eines Namens wie er verwendet/interpretiert wird. Manche dieser Regeln sind Konventionen an die man sich halten soll, andere wiederum sind zwingend vorgeschrieben.

Namen in Ruby bestehen aus Buchstaben a-z A-Z Zahlen 0-9 und dem Unterstrich. Lokale Variablen, Methoden Namen oder Methoden Parameter können mit einem Buchstaben oder einem Unterstrich anfangen, nicht aber mit einer Zahl. Der Buchstabe sollte hier ein Kleinbuchstabe sein. Man kann zum Beispiel Methoden auch mit einem Grossbuchstaben beginnen lassen, die Konvention sagt aber ein Methodenname sollte ausschliesslich Kleinbuchstaben und gegebenenfalls Unterstriche beinhalten.

   1  def SayHello(name)
   2    puts "Hello, " + name 
   3  end
   4  
   5  >> SayHello("Adam")
   6  Hello, Adam
   7  => nil
   8  
   9  def _sayHello(name)
  10    puts "Hello, " + name 
  11  end
  12  
  13  >> _sayHello("Adam")
  14  Hello, Adam
  15  => nil
  16  
  17  def hello23(number)
  18    "Hello Number " + number
  19  end
  20  
  21  >> _my_var = hello23("24")
  22  => "Hello Number 24"
  23  >> MyVar = hello23("42")
  24  >> puts _my_var
  25  Hello Number 24
  26  => nil
  27  >> puts MyVar
  28  Hello Number 42
  29  => nil
  30  
  31  >> MyVar = hello23("666")
  32  (irb):27: warning: already initialized constant MyVar
  33  => "Hello Number 666"
  34  >> puts MyVar
  35  Hello Number 666

In diesen Beispielen sieht was mit Konvention gemeint ist: Es würde zumindest bis auf ein Beispiel trotzdem ohne Probleme funktionieren. Einzig das letzte Beispiel mit MyVar zeigt eine weitere Regel auf: Konstanten beginnen in Ruby mit einem Grossbuchstaben. Und was man hier noch zum ersten mal richtig spüren kann: In Ruby sind sehr viele Sachen trotzdem erlaubt, der Programmierer wird als mündig erklärt und man kann auch einer Konstanten (allerdings mit einer Warnung einen neuen Wert zuweisen. Das kann man auch unterbinden, dazu später mehr)

Weiters setzt man mit einem Prefix Zeichen den sogenannten Scope, den Sichtbarkeitsbereich, einer Variablen. Eine Global gültige Variable beginnt mit einem Dollar Zeichen ($), eine Instanz Variable mit einem “at” Zeichen (@) und Klassen Variablen mit einem doppelten “at” Zeichen (@@)

Als Konventionen gelten weiters: Methoden- oder Variablennamen die aus mehreren Wörtern zusammengesetzt sind werden mit Kleinbuchstaben geschrieben, wobei die Wörter durch Unterstriche getrennt werden. Klassen Namen beginnen mit einem Grossbuchstaben und werden ohne Unterstriche geschrieben, wobei jedes einzelne Wort mit einem Grossbuchstaben beginnt.

Noch eine Tabelle zur Illustration:

Variablen Konstanten und
Lokale Globale Instanz Klassen Klassen-Namen
name $debug @name @@sum PI
x_value $_ @V @@B String
myVar $CUSTOMER @line_1 @@max MinPerHour
thx1138 $plan9 @_ @@x_pos MyClass
_42 $Global @point2 @@MAXX Music_Video

Method können zusätzlich noch mit einem der Zeichen ?, ! oder = beendet werden.

blog comments powered by Disqus

Weitere Artikel die Sie interessieren könnten:

Deployment von Java Web Applikationen mit Chef von Opscode

There is a rework of the data driven deployment of java web applications. This Vagrant project on github ( https://github.com/iteh/vagrant-demos/ ) showcases the application cookbook for chef with a reworked application definition and LWRP for...

Links der Woche vom 2011-05-23 bis 2011-05-29

Diese Woche Links zu den Themen Windows, Ruby, opscode, JavaScript, maps, Leaflet, WordPress, Chef, windows, powershell, opschef, ios, ruby, devops, sysadmin, monitoringsucks

Links der Woche vom 2011-05-16 bis 2011-05-22

Diese Woche Links zu den Themen coffeebeans, Rails, CoffeeScript, Array, Ruby, Chef, Django, zo, devops, sysadmin, git, chef, CSS3, HTML5, WordPress, nipplegate, MongoDB, rails, rails3, asciicast, test, Android, opschef, Gem, aws, slim, Haml, ruby

Links der Woche vom 2011-05-09 bis 2011-05-15

Diese Woche Links zu den Themen wi, opschef, ActiveAdmin, rails, ror, ruby, HTML5, Chef, cnet, MongoDB, Sinatra, Rack, apple, git, aws, chef, opscode, sysadmin, Ksplice, noSQL, RubyTutorials, CSS3, EC2, AWS, MacRuby, iOS, m

Links der Woche vom 2011-04-11 bis 2011-04-17

Diese Woche Links zu den Themen ipad, iphone, opschef, ruby, OpenCV, detection, image, Weinberg, Ohai, automation, pr, test, gem, cloudfoundry, devops, cfoundry

Data Driven Deployment einer Java Web Application mit Chef Solo

Chef Application Cookbook Showcase Dieses Vagrant Projekt auf unserem Github Repository ( https://github.com/iteh/vagrant-demos/ ) zeigt die Verwendung des Application Cookbooks für Chef

Links der Woche vom 2011-04-04 bis 2011-04-10

Diese Woche Links zu den Themen Pow, Rack, ActiveRecord, Rails, Algorithms, Ruby, rails, optimize, CSS3, railscasts, chat, macbook, opschef, ruby

Links der Woche vom 2011-03-21 bis 2011-03-27

Diese Woche Links zu den Themen MacRuby, Java, Ruby, Mirah, CSS, refreshtoplayagain, gainsboro, photo, Design, mechanize, capybara, PHP, Rails, html5, webdesign, XCode, iPads, WordPress, Vagrant, Opscode, RUBY, Selenium, php, opschef, osx, devops,...

Links der Woche vom 2011-03-14 bis 2011-03-20

Diese Woche Links zu den Themen opschef, chef, mwrc, saas, Subscription, Billing, git, ruby, HTTP, Rails, Caching, devops, vagrant, opscode, Wordpress

Wordpress über JSON Api mit Facebook Page oder Tumblr befüllen

In diesem Beispiel zeigen wir die Installation von Wordpress in einem Ubuntu LAMP Stack. Weiters wird das JSON-Api Plugin für Wordpress und ein Theme installiert. Danach wird mit Mechanize der Wordpress Blog automatisch installiert und...