Die Programmiersprache Ruby

Blog| Forum| Wiki  

Ruby
Datei:Ruby_Logo.png
Das offizielle Logo von Ruby.
Entwickler: Yukihiro "Matz" Matsumoto
Aktuelle stabile Version: 1.9.1-p378
Betriebssystem: Diverse.
Lizenz: http://www.ruby-lang.org/en/LICENSE.txt
Website: http://www.ruby-lang.org

Inhaltsverzeichnis

Entstehung

Ruby ist eine komplett objektorientierte, höhere Programmiersprache und wurde (und wird) von Yukihiro "Matz" Matsumoto entwickelt. Ruby entstand 1993 (zu dem Zeitpunkt noch ohne Code!) aus Unzufriedenheit Matz' über andere Programmiersprachen. Python war ihm nicht objektorientiert genug, C zu statisch, Perl nicht mächtig genug. Also vereinte er die seiner Meinung nach besten Eigenschaften aller ihm bekannten Programmiersprachen (sein Liebling war zu diesem Zeiptpunkt angeblich Smalltalk) und schuf die nach dem kostbaren Edelstein und als Anspielung auf Perl benannte Sprache Ruby. Aus diesem Grund liegt Ruby eine wohl einzigartige Interpretation des "Prinzips der geringsten Überrschung" zugrunde, Matz selbst sagt dazu:

"Das Prinzip der geringsten Überrschung ist das Prinzip meiner geringsten Überraschung. Und das Prinzip der geringsten Überraschung, nachdem du Ruby gut gelernt hast."

Für weitere Prinzipien, siehe Rubys Prinzipien.

Die offizielle Website von Ruby ist ruby-lang.org. Wer sich für das allerneueste interessiert und des Japanischen mächtig ist, kann sich Matz' Blog ansehen. Eine Liste der Webseiten rund um Ruby gibt es hier.

Die Sprache selbst

Ruby ist...

  • ...vollständig objektorientiert. Das heißt, jede einzelne Funktion ist eine Methode und jeder einzelne Datentyp ein Objekt. "Primitive Datentypen" wie in anderen Programmiersprachen gibt es nicht. Siehe hierzu EIAO.
1
2
3
4
3.times{puts "3".class}
#=> String
#=> String
#=> String


  • ...äußerst flexibel. Klassen und Methoden können sich zur Laufzeit verändern, zusätzlich kommt es Ruby nie auf die Klasse eines Objekts an; Wird eine Methode aufgerufen, ist es Ruby egal, wer diese Methode ausführt, Hauptsache, sie wird ausgeführt. Dies wird als Duck Typing bezeichnet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def unbekannt
  puts "Ich weiß nicht, was ich jetzt tue!"
  yield
end

unbekannt do
  puts "Hello world!"
end
#=> Ich weiß nicht, was ich jetzt tue!
#=> Hello world!

unbekannt do
  File.delete(__FILE__)
end
#=>Ich weiß nicht, was ich jetzt tue!
#...
#Programm gelöscht.

#---------------------------------------------
class String
  def reverse_words
    self.split(" ").reverse.join(" ")
  end
end

puts "Hallo auch".reverse_words
#=> auch Hallo


Rubys Syntax

Rubys Syntax ist sehr leserlich (außer man legt es drauf an, siehe HowToObfuscate). Matz hat einmal gesagt, "Ich will Ruby natürlich machen, nicht einfach". Ein vollständiges Ruby-Programm sieht bereits so aus:


puts "Hello world!"

Es wird keine Klasse benötigt, in der der Code ausgeführt wird, denn Rubyprogramme werden grundsätzlich immer von einem "Main"-Objekt eingefasst. Klammern um Methodenargumente sind in den meisten Fällen optional, das bedeutet ebenfalls eine Erleichterung des Lesens von Rubys ohnehin schon "federleichter" Syntax.

Die bereits oben beschriebene Flexibilität von Ruby bringt natürlich auch Nachteile mit sich. So ist Ruby nicht typensicher, man kann einer Methode grundsätzlich alle Typen von Argumenten übergeben und die Methode muss sehen, wie sie damit klar kommt. Auch kann es vorkommen, dass Methoden z.B. der Klasse String während der Laufzeit überschrieben oder entfernt werden, was dazu führen kann, dass unter Umständen das gesamte Programm nicht mehr funktionsfähig ist.

1
2
3
4
#Das sollte man NICHT tun
class Object
  undef initialize
end


Ruby 1.9 und 2

Ruby ist im Umbruch. Momentan wird die Sprache von dem Entwicklerteam um Matz komplett überarbeitet; die daraus entstehende Version Ruby 2 wird nicht abwärtskompatibel sein. Dies tritt bereits bei Ruby 1.9.1 heraus und wird sich wohl zu Ruby 2 hin noch verstärken, das RubyWiki-Team arbeitet an einer Liste der Veränderungen von Ruby 1.8 zu 1.9. Wie groß die Unterschiede der zwei Versionen sind, zeigt zum Beispiel, dass das Rubyforum verschiedene Rubriken für Ruby 1.8 und 1.9 besitzt.

Siehe auch