Privacy Policy Cookie Policy Terms and Conditions Ruby (Programmiersprache) - Wikipedia

Ruby (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie

Ruby

Offizielles Logo
Basisdaten
Paradigmen:
Erscheinungsjahr: 1995
Designer:
Entwickler: Yukihiro Matsumoto und andere
Aktuelle Version: 1.8.5  (25. August 2006)
Typisierung: streng und dynamisch
wichtige Implementierungen:
Dialekte:
Einflüsse: Smalltalk, Perl, Python, LISP
Beeinflusste:
Betriebssystem: Plattformunabhängig (siehe unten)
Lizenz: GPL und eigene (siehe Lizenz)
Website: ruby-lang.org

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

Inhaltsverzeichnis

[Bearbeiten] 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 in etwa einen Stellenwert wie Python im Westen. In Europa und Amerika wurde Ruby ab dem Jahr 2000 durch erste nicht-japanische Literatur bekannt.

[Bearbeiten] Merkmale

[Bearbeiten] Programmierparadigmen

Ruby wurde ähnlich 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. Trotzdem handelt es sich bei allen Datentypen in Ruby um Objekte, die von einer bestimmten Klasse erzeugt wurden.

[Bearbeiten] 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

[Bearbeiten] 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.

[Bearbeiten] Funktionale Programmierung

Ähnlich zu Haskell gibt es auch in Ruby Funktionen höherer Ordnung. So sieht z. B. die Methode map, welche eine bestimmte Methode auf jedes Element einer Liste anwendet (in diesem Fall String#reverse, welche den String umdreht), in Ruby wie folgt aus:

['Daniel', 'Lilli', 'Otto'].map { |element| element.reverse }
# Rückgabewert: ["leinaD", "illiL", "ottO"]

[Bearbeiten] Besonderheiten

[Bearbeiten] Mehrere Wege

Ähnlich wie Perl verfolgt auch Ruby das Prinzip: „Es gibt mehr als einen Weg, etwas zu tun“ (kurz: TIMTOWTDI für „There is more than one way to do it“ ). Hiermit 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"

[Bearbeiten] Prinzip der geringsten Überraschung

Ruby wurde nach dem Prinzip der geringsten Überraschung (kurz: POLS für „Principle of least surprise“) entworfen. Es wird hierbei von den Ruby Sprachdesignern versucht, die Sprache frei von Fallen und Widersprüchen zu halten.

[Bearbeiten] 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. Hierbei wird die Introspektion von Ruby eingesetzt. Mit dieser kann überprüft werden, ob ein Objekt eine bestimmte Methode bereitstellt. Auf Basis dieser Philosophie können Methoden geschrieben werden, die mit Objekten unterschiedlichster 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. Ist dies nicht der Fall, wird eine entsprechende Fehlermeldung 'Keine Bremse vorhanden!' ausgegeben.

[Bearbeiten] Allgemeines

[Bearbeiten] 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. Hierzu sollten die Lizenzbedingungen (siehe Absatz Lizenzbedingungen) beachtet werden.

[Bearbeiten] 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 bedeutendste Applikation, die auf Ruby basiert, ist das Web-Framework Ruby on Rails zu nennen.

[Bearbeiten] Implementierungen

Die ursprüngliche Referenzimplementierung von Ruby (aktuelle Version 1.8.5) wurde von Yukihiro „Matz“ Matsumoto als Interpreter in C entworfen. Der derzeitig offizielle Entwicklerzweig (aktuelle Version 1.9.0) bietet zusätzlich eine erste Implementierung eines Wordcode-Interpreters genannt YARV (kurz für Yet Another Ruby VM). Weiterhin besitzt diese Version eine der derzeitig (Juli 2006) fortschrittlichsten Regexp-Maschinen.

Der offizielle Interpreter läuft auf den folgenden Betriebssystemen:

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

Eine weitere inoffizielle 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.

[Bearbeiten] 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> (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 mithilfe von TryRuby im Browser ausgeführt werden.

[Bearbeiten] 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.

[Bearbeiten] 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.

[Bearbeiten] Lizenz

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

[Bearbeiten] 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)

[Bearbeiten] 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)

[Bearbeiten] Weblinks

Wikibooks: Ruby-Programmierung – Lern- und Lehrmaterialien
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu