Ruby (engl. für Rubin) ist eine interpretierte, objektorientierte Programmiersprache, die mehrere weitere Programmierparadigmen (Prozedurale Programmierung, Funktionale Programmierung, Nebenläufigkeit) unterstützt.
Ruby | |
---|---|
![]() | |
Basisdaten | |
Erscheinungsjahr: | 1995 |
Designer: | Yukihiro Matsumoto |
Entwickler: | Yukihiro Matsumoto und andere |
Aktuelle Version: | 1.9.0 (25. Dezember 2007) |
Typisierung: | dynamisch |
Beeinflusst von: | Smalltalk, Perl, Python, LISP |
Beeinflusste: | Groovy |
Betriebssystem: | Plattformunabhängig (siehe unten) |
Lizenz: | GPL und eigene (siehe Lizenz) |
ruby-lang.org |
Ruby wird seit dem 24. Februar 1993 von Yukihiro „Matz“ Matsumoto in Japan entwickelt und wird heute als Open-Source-Projekt weitergepflegt. In Europa und Amerika wurde Ruby ab dem Jahr 2000 durch erste nicht-japanische Literatur bekannt. Der Name basierte ursprünglich auf dem Edelstein Rubin und wird heute auch als Anspielung auf die Programmiersprache Perl verstanden.
Merkmale
Programmierparadigmen
Ruby ist eine objektorientierte Sprache (alle Datentypen in Ruby sind Objekte, die von einer bestimmten Klasse erzeugt wurden), wurde aber ähnlich wie C++ als „Multiparadigmen-Sprache“ entworfen. Das bedeutet, dass es dem Entwickler offensteht, weitere Programmierparadigmen zur Erstellung seiner Programme zu nutzen.
Objektorientierte Programmierung
Ruby ist wie Smalltalk vollständig objektorientiert. Da es aufgrund dessen keine primitiven Datentypen wie in Java gibt, sind folgende Sprachkonstrukte mit Zahlen und Zeichenketten möglich:
puts 42.class # Ausgabe: Fixnum
puts "ein kurzer String".class # Ausgabe: String
Eine Klassendefinition, die von der Mutterklasse Object erbt, könnte wie folgt aussehen:
class Auto
def beschleunigen
puts 'BrumBrumBrum'
end
end
auto1 = Auto.new
auto1.beschleunigen
Eine Klassendefinition die von einer anderen Klasse als Object erbt, muss wie folgt implementiert werden:
class GutesAuto < Auto
def bremsen
puts 'Quietsch'
end
end
auto2 = GutesAuto.new
auto2.beschleunigen
auto2.bremsen
Die Klasse GutesAuto
erbt alle Methoden der Klasse Auto
, u. a. auch beschleunigen
. Zusätzlich wird für GutesAuto
noch die Methode bremsen
definiert.
Imperative Programmierung
Im Gegensatz zu Sprachen wie Java und C# ist es in Ruby nicht notwendig, seine Programme explizit in einer Klasse zu definieren. Da jedes Ruby-Programm in einem globalen main
-Objekt erstellt wird, ist dieses sich oft wiederholende Sprachkonstrukt unnötig. Aufgrund dessen ist folgender Codeabschnitt bereits ein vollständig lauffähiges Ruby-Programm:
def methode
puts "Hello World"
end
methode
Funktionale Programmierung
Weil in Ruby alles einen Wert hat, lassen sich Probleme funktional behandeln.
lang = if "de." == url[0, 3]
"Deutsche Wikipedia"
else
"Unbekannte Sprache"
end
Besonderheiten
Prinzip der geringsten Überraschung
Ruby wurde nach dem Prinzip der geringsten Überraschung (kurz POLS für „Principle of least surprise“) entworfen. Rubys Designer versuchen, die Sprache so zu gestalten, dass Programmierer die Sprache intuitiv nutzen können:
„Das Prinzip der geringsten Überraschung ist das Prinzip meiner geringsten Überraschung. Und es ist das Prinzip der geringsten Überraschung nachdem Du Ruby sehr gut gelernt hast.“
Duck Typing
Die Duck-Typing-Philosophie von Ruby basiert auf der Idee, die Behandlung eines Objekts nicht von dessen Klasse, sondern von den von ihm bereitgestellten Methoden abhängig zu machen.
foo = Hash.new
foo["array"] = [1, "\n", "a"]
foo["file"] = File.new("/etc/passwd")
foo.each do |key, value|
puts "#{key.capitalize}:"
value.each do |element|
puts element
end
end
Ausgabe:
Array: 1 a File: root:x:0:0:root:/root:/bin/sh [...]
Im Beispiel ist es im Ausgabeteil unerheblich, von welcher Klasse value
ist, es ist nur wichtig, dass die Methode each
verstanden wird.
Ruby bietet Exceptions, Introspection und andere Mechanismen, um das Duck Typing abzusichern, sofern der Programmierer das wünscht.
Allgemeines
Nutzungsbedingungen
Ruby ist freie Software. Aufgrund dessen ist es kostenlos nutzbar und im Quelltext verfügbar. Dadurch ergibt sich die Möglichkeit, die Sprache an seine eigenen Bedürfnisse anzupassen oder sie in eigene Programme einzubinden.
Der Interpreter und die Standardbibliothek von Ruby sind grundsätzlich unter den Bedingungen der GPL nutzbar. Des Weiteren besteht die Möglichkeit, Ruby unter anderen Konditionen zu verwenden (siehe Lizenzbedingungen).
Verbreitung
Lange Zeit wurde Ruby mangels englischsprachiger Dokumentation fast ausschließlich in Japan benutzt, wo es mittlerweile einen ähnlichen Stellenwert hat, wie Perl und Python in Europa und Amerika. Um das Jahr 2000 wurden Aktivitäten gestartet, um Ruby auch außerhalb Japans bekannt zu machen, woraufhin mit der Zeit auch englische Dokumentationen entstanden. Inzwischen gibt es dutzende deutschsprachige Bücher zu Ruby im allgemeinen und speziellen Themen.
Als derzeit bedeutendste Applikation, die auf Ruby basiert, ist das Web-Framework Ruby on Rails zu nennen.
Implementierungen
Die ursprüngliche Referenzimplementierung von Ruby (aktuelle Version 1.8.6) wurde von Yukihiro „Matz“ Matsumoto als Interpreter in C entworfen. Er wird oft als MRI (Matz Ruby Interpreter) bezeichnet und ist derzeit am weitesten verbreitet.
Die nächste Version von Ruby ist zur Zeit (Januar 2008) noch in der Entwicklung (aktuelle Version 1.9.0). Den Kern bildet der schnellere Wordcode-Interpreter YARV (kurz für Yet Another Ruby VM). Weiterhin wird diese Version eine der derzeit (Juli 2006) fortschrittlichsten Regexp-Maschinen namens Oniguruma enthalten und Multibyte-Zeichensätze wie UTF-8 unterstützen.
Der offizielle Interpreter läuft auf den folgenden Betriebssystemen:
Eine weitere Implementierung ist JRuby. Dabei handelt es sich um eine vollständige Neuentwicklung des Ruby-Interpreters in Java mit dem Ziel, Ruby nahtlos in die Java-Plattform zu integrieren.
Interaktive Ruby-Shell
Interactive Ruby (kurz: irb) ist ein Kommandozeileninterpreter für Ruby, mit welchem der Anwender interaktiv Ruby programmieren kann. Oft wird er zum Analysieren und Testen eingesetzt:
irb(main):001:0> (5 + 7) * 2
=> 24
irb(main):002:0> ((5 + 7) * 2).to_s.reverse
=> "42"
irb(main):003:0> "ruby the language".size
=> 17
Irb wird mit dem Ruby-Interpreter ausgeliefert, kann aber auch mit Hilfe von TryRuby im Browser ausgeführt werden.
RDoc und ri
RDoc ist ein Software-Dokumentationswerkzeug, welches aus Ruby- und C-Quelltexten automatisch HTML-Dokumentationsdateien erstellt. Weiterhin wird eine Datenbank aufgebaut, die mit dem Tool ri durchsucht werden kann. RDoc und ri sind Bestandteil der Standarddistribution und werden direkt mit dem Interpreter zusammen ausgeliefert.
RubyGems
RubyGems (kurz: gems) ist das offizielle Paketsystem für Ruby. Mit ihm hat der Anwender die Möglichkeit mehrere Versionen eines Programmes oder einer Bibliothek kontrolliert zu installieren und wieder zu entfernen. Durch die Versionierung der gems können alte und neue Pakete problemlos nebeneinander existieren.
Literatur
- Praxiswissen Ruby von Sascha Kersken, O'Reilly Verlag, 28. Februar 2007, ISBN 978-3-89721-478-1 (deutsch – beschreibt Version 1.8.5)
- Programming Ruby, 2nd Edition, von Dave Thomas und Andy Hunt, Pragmatic Bookshelf, 15. Oktober 2004, ISBN 0-974-514-055 (englisch – beschreibt Version 1.8)
Ruby-Newsgroups
Das Usenet stellt für die Diskussion rund um Ruby die folgenden Newsgroups bereit:
- comp.lang.ruby (englischsprachig)
- de.comp.lang.ruby (deutschsprachig)
Weblinks
- ruby-lang.org/de – offizielle Webseite
- ruby-doc.org – Dokumentationssammlung zu Ruby (englisch)
- TryRuby – Ruby direkt im Browser testen (englisch)
- [1] – Ruby-Referenz; ins Deutsche übersetzt
- Lizenzbedingungen
- Deutsches Rubyforum
- Linkkatalog zum Thema Ruby bei curlie.org (ehemals DMOZ)