See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Ruby (Programmiersprache) – Wikipedia

Ruby (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie

Ruby

Offizielles Logo
Paradigmen: multiparadigmatisch
Erscheinungsjahr: 1995
Entwickler: Yukihiro Matsumoto und andere
Aktuelle Version: 1.8.7  (31. Mai 2008[1])
Typisierung: dynamisch ("Duck-Typing")
wichtige Implementierungen: Ruby MRI, YARV, JRuby, Rubinius (siehe unten)
Einflüsse: Smalltalk, Perl, Python, LISP, Scheme, CLU, Eiffel, Ada, Dylan
Beeinflusste: Groovy
Betriebssystem: plattformunabhängig
Lizenz: GPL und eigene (siehe Nutzungsbedinungen)
Website: ruby-lang.org

Ruby (engl. für Rubin) ist eine moderne, vielseitige höhere Programmiersprache, die Mitte der Neunziger Jahre vom Japaner Yukihiro Matsumoto entworfen wurde.

Sie ist interpretiert und unterstützt mehrere Programmierparadigmen (unter anderem Objektorientierte, Prozedurale und Funktionale Programmierung sowie Nebenläufigkeit), bietet dynamische Typisierung, Reflexion und Automatische Speicherbereinigung.

Inhaltsverzeichnis

[Bearbeiten] Geschichte

Aus Unzufriedenheit über verfügbare Skriptsprachen begann Yukihiro „Matz“ Matsumoto 1993 an einer eigenen Sprache zu arbeiten und gab am 21. Dezember 1995 die erste Version von Ruby, 0.95, frei.[2] Den Namen, hergeleitet vom Edelstein Rubin, wählte er als Anspielung auf die Programmiersprache Perl.[3] Zunächst wurde Ruby mangels englischsprachiger Dokumentation fast ausschließlich in Japan benutzt, wo es einen ähnlichen Stellenwert erlangte 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 auch dutzende deutschsprachige Bücher zu Ruby im Allgemeinen und speziellen Themen.

Heute wird die Sprache als Open-Source-Projekt weitergepflegt.

[Bearbeiten] Merkmale

[Bearbeiten] Programmierparadigmen

Ruby ist eine objektorientierte Sprache. Die Sprache wurde aber ähnlich wie C++ als „Multiparadigmen-Sprache“ entworfen. Das bedeutet, dass es dem Entwickler offensteht, weitere Programmierparadigmen zur Erstellung seiner Programme zu nutzen. Drei verbreitete Paradigmen sollen im Folgenden beschrieben werden.

[Bearbeiten] Objektorientierte Programmierung

Ruby ist wie Smalltalk vollständig objektorientiert: Alle Funktionen in Ruby sind Methoden und alle Datentypen sind Objekte, auch solche, die in vielen anderen Sprachen als primitive Datentypen gelten. So werden etwa folgende Sprachkonstrukte mit Zahlen und Zeichenketten möglich:

puts 42.class                  # Ausgabe: Fixnum
puts "ein kurzer String".class # Ausgabe: String

Eine Klasse, die automatisch von der Mutterklasse Object erbt, könnte wie folgt definiert werden:

class Auto
  def beschleunigen
    puts "BrumBrumBrum"
  end
end
 
auto1 = Auto.new
auto1.beschleunigen

Ausgabe:

BrumBrumBrum

Eine Klasse, die von einer anderen Klasse als Object erbt, wird so definiert:

class GutesAuto < Auto
  def bremsen
    puts "Quietsch"
  end
end
 
auto2 = GutesAuto.new
auto2.beschleunigen
auto2.bremsen

Ausgabe:

BrumBrumBrum
Quietsch

Die Klasse GutesAuto erbt alle Methoden der Klasse Auto, u. a. auch beschleunigen. Zusätzlich wird für GutesAuto die Methode bremsen definiert.

[Bearbeiten] Prozedurale 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. Stattdessen kann ein Programm auch aus Prozeduren aufgebaut werden. Folgender Codeabschnitt ist bereits ein vollständig lauffähiges Ruby-Programm:

def gruessen
  puts "Hallo Welt!"
end
 
gruessen

[Bearbeiten] Funktionale Programmierung

Weil in Ruby jeder Ausdruck einen Wert hat, lassen sich Probleme funktional behandeln.

Im folgenden Beispiel gibt das case-Konstrukt je nach Wert der Bedingung einen anderen String zurück.

gruss = case sprache
          when "Deutsch"   then "Hallo Welt"
          when "Englisch"  then "Hello, world"
          when "Japanisch" then "konnichiwa sekai"
          else raise "Unbekannte Sprache"
        end

[Bearbeiten] Prinzipien

[Bearbeiten] Prinzip der geringsten Überraschung

Ruby folgt dem Prinzip der geringsten Überraschung (kurz POLS für „Principle of least surprise“). Rubys Designer versuchen, die Sprache so zu gestalten, dass Programmierer sie intuitiv nutzen können und möglichst wenig von ihrem Verhalten überrascht werden. Matsumoto gibt an, die Sprache primär auf seine eigenen Bedürfnisse ausgerichtet zu haben:

„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.“

Yukihiro „Matz“ Matsumoto

[Bearbeiten] Duck Typing

Die Duck-Typing-Philosophie von Ruby basiert auf der Idee, die Behandlung eines Objekts nicht von dessen Klasse, sondern von dessen Methoden abhängig zu machen.

class Ente
  def beschreibung
    "Eine dicke Ente"
  end
  def quak
    "Quaaaaaak!"
  end
end
 
class Frosch
  def beschreibung
    "Ein grüner Frosch"
  end
  def quak
    "Quak! Quak!"
  end
end
 
def lass_quaken tier
  puts tier.beschreibung+" macht "+tier.quak
end
 
lass_quaken Ente.new
lass_quaken Frosch.new

Ausgabe:

Eine dicke Ente macht Quaaaaaak!
Ein grüner Frosch macht Quak! Quak!

Im Beispiel ist es für lass_quaken unerheblich, von welcher Klasse tier ist, es ist nur wichtig, dass die Methoden beschreibung und quak verstanden werden.

Ruby bietet Exceptions, Introspection und andere Mechanismen, um das Duck Typing abzusichern, sofern der Programmierer das wünscht.

[Bearbeiten] Syntax

[Bearbeiten] Besonderheiten

Zeilenumbrüche markieren das Ende einer Anweisung, Semikolons bewirken dasselbe. Sonstiger Whitespace hat keine Bedeutung.

Klammern um Argumente können bei Eindeutigkeit weggelassen werden, sowohl bei der Deklaration einer Methode, als auch beim Aufruf. Der zuletzt berechnete Wert einer Methode ist gleichzeitig ihr Rückgabewert:

def sperre text
  text.split("").join " "
end
 
puts sperre "Syntaktischer Zucker!"

Ruby unterscheidet fünf verschiedene Gültigkeitsbereiche:

  • Normalerweise ist eine Variable lokal und nur innerhalb der umgebenden Methode gültig.
  • Ein @ vor Variablen deklariert diese als Attribute, sie werden dann dauerhaft der Klasseninstanz zugeordnet und für diese sichtbar.
  • Ein vorangestelltes @@ macht Variablen zu Klassenvariablen, die zur umgebenden Klasse gehören.
  • Mit $ werden Variablen global und sind damit im gesamten Programm sichtbar.
  • Schließlich gibt es Variablen, die nur innerhalb eines Blocks gültig sind.

[Bearbeiten] Blöcke

Anstatt von For-Schleifen macht man in Ruby Gebrauch von Iteratoren in Verbindung mit sogenannten Blöcken. Ausdrücke wie

array.each do |i|
    ...
end

oder in der Kurzschreibweise

array.each{|i| ... }

iterieren über array, wobei der Iterator mit der Bezeichnung i versehen wird. Mit Blöcken werden elegante Konstruktionen wie 5.times{ ... } oder array.sort_by{|i| i.size} möglich.

[Bearbeiten] Bestandteile

[Bearbeiten] Interaktive Ruby-Shell

Interactive Ruby (kurz: irb) ist ein Kommandozeileninterpreter für Ruby, mit welchem der Anwender interaktiv Ruby programmieren kann. Er kann zum Analysieren und Testen eingesetzt werden:

irb(main):001:0> (5 + 7) * 2
=> 24
irb(main):002:0> ((5 + 7) * 2).to_s.reverse
=> "42"
irb(main):003:0> "Ein Beispielstring".size
=> 18

Irb wird mit dem Ruby-Interpreter ausgeliefert, kann aber auch mit Hilfe von TryRuby[4] 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 zusammen mit dem Interpreter 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. Durch die Versionierung der Pakete können alte und neue Versionen problemlos nebeneinander existieren.

[Bearbeiten] Implementierungen

Die ursprüngliche Referenzimplementierung von Ruby (aktuelle Version: 1.8.7) wurde von Yukihiro „Matz“ Matsumoto als Interpreter in C entworfen. Er wird oft als MRI (Matz's Ruby Interpreter) bezeichnet und ist derzeit am weitesten verbreitet.

Die nächste Version von Ruby ist zur Zeit (Mai 2008) noch in der Entwicklung (aktuelle Version 1.9.0). Den Kern bildet YARV (kurz für Yet Another Ruby VM), eine Virtuelle Maschine. Statt ein Rubyprogramm direkt auszuführen, wird es so zunächst in Bytecode übersetzt und dann von YARV interpretiert, wodurch sich ein Geschwindigkeitsvorteil ergibt. Weiterhin wird diese Version eine leistungsstarke Regexp-Maschine namens Oniguruma enthalten und Multibyte-Zeichensätze wie UTF-8 unterstützen.

Der offizielle Interpreter läuft auf den folgenden Betriebssystemen:

Inzwischen sind mehrere alternative Implementierungen von Ruby verfügbar, unter anderem:

  • JRuby, eine Neuimplementierung des Ruby-Interpreters in Java mit dem Ziel, Ruby nahtlos in die Java-Plattform zu integrieren
  • Rubinius, eine von Smalltalk-80 inspirierte virtuelle Maschine
  • IronRuby und Gardens Point Ruby.NET, die Ruby ins .NET-Framework integrieren sollen,
  • Cardinal, ein Interpreter für die virtuelle Maschine Parrot
  • XRuby, das Ruby-Quelltext in Java-Bytecode übersetzt.

[Bearbeiten] Kritik

  • Der offizielle Interpreter unterstützt keine nativen Threads, was etwa das Potential von Mehrkernprozessoren nicht voll ausnutzt.[5]
  • Ruby bietet noch keine native Unterstützung für Unicode.[6]

Die beiden zuletzt genannten Nachteile werden in Ruby 2.0 behoben werden.

[Bearbeiten] Sonstiges

[Bearbeiten] Anwendungen und Bibliotheken

Mit RubyForge und dem Ruby Application Archive (RAA) stehen zwei Repositorien zur Verfügung, die zusammen über 7000 Anwendungen und Bibliotheken beherbergen.[10][11]

Als derzeit bedeutendste Anwendung, die auf Ruby basiert, ist das Web-Framework Ruby on Rails zu nennen.

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

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

[Bearbeiten] Quellen

  1. Ruby 1.8.7 Release-Announcement
  2. RubyConf: History of Ruby
  3. Ein Interview mit dem Schöpfer von Ruby
  4. TryRuby
  5. http://spec.ruby-doc.org/wiki/Ruby_Threading
  6. http://headius.blogspot.com/2006/06/unicode-in-ruby-unicode-in-jruby.html
  7. http://www.bitwisemag.com/2/What-s-Wrong-With-Ruby
  8. http://www.infoq.com/news/2007/12/ruby-19
  9. http://headius.blogspot.com/2007/04/what-would-i-will-i-change-about-ruby.html
  10. RubyForge
  11. Ruby Application Archive
  12. Rubys Lizenzbedingungen

[Bearbeiten] Literatur

Für Einsteiger
Gesamtdarstellungen
  • Dave Thomas: Programming Ruby, Second Edition. Pragmatic Bookshelf, 2004, ISBN 0-974-514-055 (englisch)
  • Hal Fulton: The Ruby Way. Addison-Wesley Professional, 2006, ISBN 978-0672328848 (englisch)
Für Fortgeschrittene
  • Lucas Carlson, Leonard Richardson: Ruby Cookbook. O'Reilly Media, 2006, ISBN 978-0596523695 (englisch)
  • Russ Olsen: Design Patterns in Ruby. Addison-Wesley Professional, 2007, ISBN 978-0321490452 (englisch)
Referenzen

[Bearbeiten] Weblinks

Wikibooks
 Wikibooks: Ruby-Programmierung – Lern- und Lehrmaterialien


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 -