Zum Inhalt springen

Benutzer:Daniel Bovensiepen/Ruby (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Juli 2006 um 22:05 Uhr durch Gissi (Diskussion | Beiträge) (Duck Typing). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Ruby
Basisdaten
Erscheinungsjahr: 1995
Entwickler: Yukihiro Matsumoto und andere
Aktuelle Version: 1.8.4  (24. Dezember 2005)
Typisierung: Dynamisch
Beeinflusst von: Smalltalk, Perl, Python, LISP
Betriebssystem: Plattformunabhängig (siehe unten)
Lizenz: GPL-kompatibel (siehe Lizenz)
ruby-lang.org

!!!! ACHTUNG: Dieser Artikel dient zur Vorbereitung einer größeren Änderung an dem Artikel Ruby_(Programmiersprache). !!!!!

Ruby (engl. für Rubin) ist eine Programmiersprache, die mehrere Programmierparadigmen umfasst. So wird die objektorientierte, prozedurale und funktionale Programmierung unterstützt.

Sie wurde in der Zeit von 1993 bis 1995 von Yukihiro „Matz“ Matsumoto in Japan entworfen und wird heute als Open Source Projekt weitergepflegt. Die Referenzimplementierung interpretiert den Quelltext derzeit ohne Zwischencode.

Der Name basierte ursprünglich auf dem Edelstein Rubin, wird heute jedoch als Anspielung auf die Programmiersprache Perl (engl. für Perle) verstanden.

Geschichte

Ruby wird seit dem 24. Februar 1993 von Yukihiro „Matz“ Matsumoto in Japan entwickelt. Die Sprache wurde 1995 im Internet veröffentlicht und besitzt in Japan einen Stellenwert wie Python hierzulande. In Europa und Amerika wurde sie ab dem Jahr 2000 durch das erste englischsprachige Ruby-Buch bekannt.

Merkmale

Programmierparadigmen

Ruby wurde ähnliche wie C++ als „Multiparadigmen-Sprache“ entworfen. Dies bedeutet, dass die Sprache selbst den Entwickler nicht dazu zwingt ein spezielles Programmierparadigma zur Erstellung seiner Programme zu verwenden.

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 meine_methode
  puts 'Hello World'
end

meine_methode

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 wiefolgt 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 wiefolgt 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.

Funktionale Programmierung

Besonderheiten

Mehrere Wege

Ähnlich wie Perl verfolgt auch Ruby das Prinzip: „There is more than one way to do it“ (kurz: TIMTOWTDI, gesprochen „Tim Today“, oft auch „Tim Towtdi“ oder „Tmtowtdi“). Zu deutsch: „Es gibt mehr als einen Weg, etwas zu tun“. Hierbei ist gemeint, dass Ruby sehr viele Freiheiten bei der syntaktischen Gestaltung eines Programmes lässt. So kann ein Entwickler ähnlich wie in C seine Anweisungen mit einem Semikolon abschließen und einen Anweisungsblock mit geschweiften Klammern begrenzen:

(1..5).each { |zaehler|  puts "#{zaehler}. Durchlauf" }; puts "fertig";

Alternativ dazu bietet sich der ebenfalls bekannte Ansatz an, eine Anweisung mit einem Zeilenumbruch zu beenden und statt geschweiften Klammern Schlüsselwörter zu nutzen:

(1..5).each do |zaehler|
  puts "#{zaehler}. Durchlauf"
end
puts "fertig"

Prinzip der geringsten Überraschung

Ruby wurde nach dem Prinzip der geringsten Überraschung (kurz: POLS für Principle Of Least Surprise) entworfen, damit ist gemeint, dass man versucht hat die Sprache frei von Fallen und Widersprüchen zu programmieren.

Duck Typing

Im Gegensatz zu statisch typisierten Sprachen ist es in Ruby nicht sinnvoll sich auf die Klasse eines Objektes programmtechnisch zu verlassen. Dies resultiert daraus, dass die Klasse eines Objektes erst zur Laufzeit feststeht und zu dieser auch geändert werden kann. Alternativ hierzu bietet Ruby mit dem sogenannten Duck Typing ein weiteres Konzept an. Bei diesem ist es für den Programmierer irrelevant von welcher Klasse ein Objekt instanziert wurde, stattdessen wird geprüft ob ein Objekt auf eine bestimmte Nachricht (bzw. Methode) reagiert. Hierbei wird die Introspektion von Ruby eingesetzt um Objekte auf Kompatibilität zu überprüfen. Auf Basis dieses Paradigmas können Methoden geschrieben werden, die mit Objekten von unterschiedlichen Klassen kompatibel sind:

class Auto
  def beschleunigen
    puts 'BrumBrumBrum'
  end
end

class GutesAuto < Auto
  def bremsen
    puts 'Quietsch'
  end
end

def auto_abbremsen(auto)
 puts 'Auto wird abgebremst...'
 if auto.respond_to?(:bremsen)
  auto.bremsen
 else
  puts 'Keine Bremse vorhanden!'
 end
end

auto1 = Auto.new; auto2 = GutesAuto.new
auto_abbremsen(auto1)
auto_abbremsen(auto2)

Die Methode auto_abbremsen fragt nach ob für das Objekt auto die Methode bremsen definiert wurde, anstatt die Klasse abzufragen; es könnte ja nachträglich jemand in auto1 eine Bremse "eingebaut" haben.

Allgemeines

Nutzungsbedingungen

Ruby ist freie Software. Aufgrund dessen ist Sie erstens kostenlos nutzbar und zweitens im Quelltext verfügbar. Dadurch ergibt sich die Möglichkeit, die Sprache an seine eigenen Bedürfnisse anzupassen oder Sie in eigene Programme einzubinden. Hierzu sollten die Lizenzbedingungen (siehe unten) beachtet werden.

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 die Jahrtausendwende wurden Aktivitäten gestartet um Ruby auch außerhalb Japans bekannt zu machen, woraufhin mit der Zeit auch englische Dokumentation entstand. Als derzeit bedeutenste 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.4) wurde von Yukihiro „Matz“ Matsumoto als Interpreter in C entworfen. Der derzeitig offizelle Entwicklerzweig (aktuelle Version 1.9.0) bietet zusätzlich eine erste Implementierung eines Bytecode Interpreters genannt YARV (Yet Another Ruby VM).

Der offizielle Interpreter läuft auf den folgenden Betriebssystemen:

Parallel zum offizellen Hauptzweig wird seit der Version 1.8.2 ein inoffizeller Zweig namens Sydney entwickelt. Dieser zeichnet sich durch die Implementierung neuer Features aus.

Eine weitere inoffizelle Implementierung ist JRuby. Dabei handelt es sich um eine vollständige Neuentwicklung des Ruby Interpreters in Java mit dem Designziel eine nahtlose Integration mit der Java-Plattform herzustellen.

Interaktive Ruby-Shell

Interactive Ruby (kurz: irb) ist ein Kommandozeileninterpreter für Ruby mit dem sich ohne großen Aufwand Quelltext analysieren und testen lässt:

irb(main):001:0> (3 + 4) * 2
=> 14
irb(main):002:0> ((3 + 4) * 2).to_s.reverse
=> "41"

Irb wird mit dem Ruby Interpreter ausgeliefert, kann aber auch unter [1] im Browser ausgeführt werden.

RubyGems

RubyGems (kurz gems) ist das offizelle Paketsystem für Ruby.

Lizenz

Der Interpreter und die Standardbibliothek von Ruby sind grundsätzlich unter den Bedingungen der GPL nutzbar. Desweiteren besteht die Möglichkeit, Ruby unter den in [2] genannten Konditionen zu verwenden.

Literatur

  • Programming Ruby, Pragmatic Bookshelf, 15. Oktober 2004, ISBN 0-974-514-055 (englisch - beschreibt Version 1.8)
  • Programmieren mit Ruby, Addison-Wesley, 15. Februar 2002, ISBN 3-827-31965-X (deutsch - beschreibt Version 1.6)
Wikibooks: Ruby-Programmierung – Lern- und Lehrmaterialien