„Benutzer:Daniel Bovensiepen/Ruby (Programmiersprache)“ – Versionsunterschied
Erscheinungsbild
Inhalt gelöscht Inhalt hinzugefügt
Gissi (Diskussion | Beiträge) |
Artikel wurde ersetzt |
||
(25 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox_Programmiersprache| |
|||
Name=Ruby |
|||
|Logo= [[Bild:RubySourceCode.png|300px]] |
|||
|Beschreibung= Ruby Quelltext |
|||
|Erscheinungsjahr = 1995 |
|||
|Entwickler= [[Yukihiro Matsumoto]] und andere |
|||
|AktuelleVersion= 1.8.4 |
|||
|AktuelleVersionFreigabeDatum= 24. Dezember 2005 |
|||
|Typisierung = [[dynamische Typisierung|Dynamisch]] |
|||
|Betriebssystem= [[Plattformunabhängigkeit|Plattformunabhängig]] (siehe [[#Implementierungen|unten]]) |
|||
|Beeinflusst_von= [[Smalltalk (Programmiersprache)|Smalltalk]], [[Perl]], [[Python (Programmiersprache)|Python]], [[LISP]] |
|||
|Beeinflusste = |
|||
|Lizenz= [[GPL]]-kompatibel (siehe [[#Lizenz|Lizenz]]) |
|||
|Website= [http://www.ruby-lang.org ruby-lang.org] |
|||
}} |
|||
= ARTIKEL WURDE ERSETZT.. BITTE HIER NIX MEHR ÄNDERN!! = |
|||
'''!!!! ACHTUNG: Dieser Artikel dient zur Vorbereitung einer größeren Änderung an dem Artikel [[Ruby_(Programmiersprache)]]. !!!!!''' |
|||
http://de.wikipedia.org/wiki/Ruby_%28Programmiersprache%29 |
|||
'''Ruby''' (engl. für [[Rubin]]) ist eine Programmiersprache, die mehrere [[Programmierparadigma|Programmierparadigmen]] umfasst. So wird die [[Objektorientierte Programmierung|objektorientierte]], [[Prozedurale Programmierung|prozedurale]] und [[Funktionale Programmierung|funktionale]] Programmierung unterstützt. |
|||
Sie wurde in der Zeit von 1993 bis 1995 von [[Yukihiro Matsumoto|Yukihiro „Matz“ Matsumoto]] in [[Japan]] entworfen und wird heute als [[Open_source|Open Source Projekt]] weitergepflegt. Die Referenzimplementierung [[Interpreter|interpretiert]] den [[Quelltext]] derzeit ohne Zwischencode. |
|||
Der Name basierte ursprünglich auf dem [[Edelstein]] Rubin, wird heute jedoch als Anspielung auf die Programmiersprache [[Perl_(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: |
|||
<pre><nowiki>def meine_methode |
|||
puts 'Hello World' |
|||
end |
|||
meine_methode</nowiki></pre> |
|||
==== 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: |
|||
<pre><nowiki>puts 42.class # Ausgabe: Fixnum |
|||
puts "ein kurzer String".class # Ausgabe: String</nowiki></pre> |
|||
Eine Klassendefinition die von der Mutterklasse ''Object'' erbt, könnte wiefolgt aussehen: |
|||
<pre><nowiki>class Auto |
|||
def beschleunigen |
|||
puts 'BrumBrumBrum' |
|||
end |
|||
end |
|||
auto1 = Auto.new |
|||
auto1.beschleunigen</nowiki></pre> |
|||
Eine Klassendefinition die von einer anderen Klasse als ''Object'' erbt, muss wiefolgt implementiert werden: |
|||
<pre><nowiki>class GutesAuto < Auto |
|||
def bremsen |
|||
puts 'Quietsch' |
|||
end |
|||
end |
|||
auto2 = GutesAuto.new |
|||
auto2.beschleunigen |
|||
auto2.bremsen</nowiki></pre> |
|||
Die Klasse <code>GutesAuto</code> erbt alle Methoden der Klasse <code>Auto</code>, u. a. auch <code>beschleunigen</code>. Zusätzlich wird für <code>GutesAuto</code> noch die Methode <code>bremsen</code> 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_%28Programmiersprache%29|C]] seine Anweisungen mit einem Semikolon abschließen und einen Anweisungsblock mit geschweiften Klammern begrenzen: |
|||
<pre><nowiki>(1..5).each { |zaehler| puts "#{zaehler}. Durchlauf" }; puts "fertig";</nowiki></pre> |
|||
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: |
|||
<pre><nowiki>(1..5).each do |zaehler| |
|||
puts "#{zaehler}. Durchlauf" |
|||
end |
|||
puts "fertig"</nowiki></pre> |
|||
==== Prinzip der geringsten Überraschung ==== |
|||
Ruby wurde nach dem [[Prinzip der geringsten Überraschung]] (kurz: '''POLS''' für '''''P'''rinciple '''O'''f '''L'''east '''S'''urprise'') 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 [[Reflection|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: |
|||
<pre><nowiki>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)</nowiki></pre> |
|||
Die Methode <code>auto_abbremsen</code> fragt nach ob für das Objekt <code>auto</code> die Methode <code>bremsen</code> definiert wurde, anstatt die Klasse abzufragen; es könnte ja nachträglich jemand in <code>auto1</code> 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 [[#Lizenz|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]] ('''Y'''et '''A'''nother '''R'''uby '''V'''M). |
|||
Der offizielle Interpreter läuft auf den folgenden Betriebssystemen: |
|||
* [[POSIX]]-kompatible Systeme (u.a. [[Linux]], [[FreeBSD]] und [[Mac OS X]]) |
|||
* [[Microsoft Windows]] (u.a. [[Windows_2000|2000]], [[Windows_XP|XP]] und [[Windows_CE|CE]]) |
|||
* [[Virtual_Memory_System|OpenVMS]] |
|||
* [[DJGPP]] |
|||
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 ==== |
|||
'''I'''nteractive '''R'''u'''b'''y (kurz: irb) ist ein [[Kommandozeileninterpreter]] für Ruby mit dem sich ohne großen Aufwand Quelltext analysieren und testen lässt: |
|||
<pre><nowiki> |
|||
irb(main):001:0> (3 + 4) * 2 |
|||
=> 14 |
|||
irb(main):002:0> ((3 + 4) * 2).to_s.reverse |
|||
=> "41" |
|||
</nowiki></pre> |
|||
Irb wird mit dem Ruby Interpreter ausgeliefert, kann aber auch unter [http://tryruby.hobix.com/] 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 [http://www.ruby-lang.org/en/LICENSE.txt] 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) |
|||
== Weblinks == |
|||
{{Wikibooks|Ruby-Programmierung}} |
|||
* http://www.ruby-lang.org/en/ – Ruby-Homepage (Englisch) |
|||
* {{dmoz|World/Deutsch/Computer/Programmieren/Sprachen/Ruby|Ruby}} |
|||
[[Kategorie:Programmiersprache]] |
|||
[[Kategorie:Skriptsprache]] |