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.
Weitere Artikel die Sie interessieren könnten:
Deployment von Java Web Applikationen mit Chef von OpscodeThere 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-29Diese 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-22Diese 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-15Diese 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-17Diese 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 SoloChef 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-10Diese 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-27Diese 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-20Diese 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üllenIn 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...


