|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "Über Ruby" |
| 4 | +lang: de |
| 5 | +--- |
| 6 | + |
| 7 | +Warum ist Ruby so populär? Fans nennen es schön und künstlerisch, aber |
| 8 | +gleichzeitig funktional und praktisch. Wie kommt das? |
| 9 | + |
| 10 | +### Die Ideale des Ruby-Erfinders |
| 11 | + |
| 12 | +{: |
| 13 | +style="padding-left:8px;"} |
| 14 | +{: style="float:right"} |
| 15 | + |
| 16 | +Ruby ist eine Sprache der Balance. Ihr Schöpfer [Yukihiro “matz” |
| 17 | +Matsumoto][1] vermischte Teile seiner Lieblingssprachen (Perl, |
| 18 | +Smalltalk, Eiffel, Ada und Lisp) und formte daraus eine neue |
| 19 | +Programmiersprache, in der funktionale und imperative Programmierung |
| 20 | +ausbalanciert sind. |
| 21 | + |
| 22 | +Er hat oft gesagt, er versuche “Ruby natürlich zu machen, nicht |
| 23 | +einfach”, als Spiegel des echten Lebens. |
| 24 | + |
| 25 | +Darauf aufbauend fügt er hinzu: |
| 26 | + |
| 27 | +> Ruby is simple in appearance, but is very complex inside, just like |
| 28 | +> our human body<sup>[1](#fn1)</sup>. |
| 29 | +
|
| 30 | +> Ruby wirkt simpel, aber ist innen sehr komplex, genau wie der |
| 31 | +> menschliche Körper. |
| 32 | +
|
| 33 | +### Ruby wächst |
| 34 | + |
| 35 | +Seit ihrer Veröffentlichung im Jahr 1995 hat Ruby Programmierer auf der |
| 36 | +ganzen Welt angezogen und begeistert. Im Jahr 2006 hat Ruby die Massen |
| 37 | +erreicht: Aktive Usergroups entstehen in den großen Weltstädten und |
| 38 | +Konferenzen rund um Ruby sind ausverkauft. |
| 39 | + |
| 40 | +{: style="padding-left:8px;"} |
| 43 | +{: style="float:right"} |
| 44 | + |
| 45 | +Ruby-Talk, die wichtigste [Mailing-Liste](/en/community/mailing-lists/) |
| 46 | +zur Sprache Ruby, verzeichnet inzwischen 200 Einträge pro Tag. |
| 47 | + |
| 48 | +Der [TIOBE-Index][2], der die Verbreitung von Programmiersprachen misst, |
| 49 | +listet Ruby auf Platz 10 der populärsten Sprachen. Ein großer Teil |
| 50 | +dieses Wachstums ist der Beliebtheit von in Ruby geschriebener Software |
| 51 | +zu verdanken, insbesondere dem Web-Framework Ruby on |
| 52 | +Rails<sup>[2](#fn2)</sup>. |
| 53 | + |
| 54 | +Ruby ist außerdem [absolut frei](./license.txt). Nicht nur kostenlos, |
| 55 | +sondern auch frei zu benutzen, zu kopieren, zu verändern und zu |
| 56 | +vertreiben. |
| 57 | + |
| 58 | +### Alles ist ein Objekt |
| 59 | + |
| 60 | +Am Anfang hat Matz andere Sprachen studiert, um die ideale Syntax zu |
| 61 | +finden. An diese Suche erinnert sagt er: “Ich wollte eine Scriptsprache, |
| 62 | +die mächtiger als Perl und objektorientierter als Python |
| 63 | +ist<sup>[3](#fn3)</sup>.” |
| 64 | + |
| 65 | +In Ruby ist alles ein Objekt. Jedes Stück Information kann eigene |
| 66 | +Eigenschaften und Aktionen besitzen. In der Welt der objektorientierten |
| 67 | +Programmierung nennt man diese Eigenschaften *Instanzvariablen* und die |
| 68 | +Aktionen *Methoden*. Rubys rein objektorientierter Ansatz wird |
| 69 | +üblicherweise mit einem Stück Code demostriert, in dem die Methode einer |
| 70 | +Zahl aufgerufen wird: |
| 71 | + |
| 72 | + 5.times { print "Wir *lieben* Ruby -- es ist ungeheuerlich!" } |
| 73 | +{: .code .ruby-code} |
| 74 | + |
| 75 | +In vielen Sprachen sind Zahlen und andere primitive Typen keine Objekte. |
| 76 | +Ruby folgt dem Einfluss von Smalltalk und gibt all ihren Typen Methoden |
| 77 | +und Instanzvariablen. Das erleichtert die Verwendung von Ruby, da die |
| 78 | +Regeln für Objekte überall in der Sprache gültig sind. |
| 79 | + |
| 80 | +### Rubys Flexibilität |
| 81 | + |
| 82 | +Ruby wird als flexible Sprache angesehen, da der Programmierer die |
| 83 | +Bestandteile der Sprache beliebig verändern kann. Grundlegendes kann |
| 84 | +gelöscht oder umdefiniert werden. Vorhandenes kann erweitert werden. |
| 85 | +Ruby versucht, den Programmierer nicht zu behindern. |
| 86 | + |
| 87 | +Ein Beispiel: In Ruby wird mit dem Plus-Operator (`+`) addiert. Aber |
| 88 | +wenn man lieber das Wort `plus` benutzen möchte, kann man diese Methode |
| 89 | +zu Rubys eingebauter Klasse `Numeric` hinzufügen. |
| 90 | + |
| 91 | + class Numeric |
| 92 | + def plus(x) |
| 93 | + self.+(x) |
| 94 | + end |
| 95 | + end |
| 96 | + |
| 97 | + y = 5.plus 6 |
| 98 | + # y ist jetzt 11 |
| 99 | +{: .code .ruby-code} |
| 100 | + |
| 101 | +Rubys Operatoren sind syntaktischer Zucker für Methoden; man kann sie |
| 102 | +ebenfalls umdefinieren. |
| 103 | + |
| 104 | +### Blöcke: Ein mächtiges Ruby-Konstrukt |
| 105 | + |
| 106 | +Auch Rubys Blöcke bieten große Flexibilität. Der Programmierer kann eine |
| 107 | +echte Closure an eine Methode übergeben, die beschreibt, wie diese |
| 108 | +Methode arbeiten soll. Diese wird *Block* genannt und ist zu einer der |
| 109 | +beliebtesten Eigenschaften von Ruby geworden – insbesondere unter |
| 110 | +Ruby-Neulingen, die vorher mit imperativen Sprachen wie PHP oder Visual |
| 111 | +Basic gearbeitet haben. |
| 112 | + |
| 113 | +Blöcke sind durch funktionale Programmiersprachen inspiriert. Matz sagt: |
| 114 | +“Mit Ruby-Closures wollte ich die Kultur von LISP |
| 115 | +bewahren<sup>[4](#fn4)</sup>.” |
| 116 | + |
| 117 | + search_engines = |
| 118 | + %w[Google Yahoo MSN].map do |engine| |
| 119 | + "http://www." + engine.downcase + ".com" |
| 120 | + end |
| 121 | +{: .code .ruby-code} |
| 122 | + |
| 123 | +Im obigen Quelltext steht der Block zwischen `do` und `end`. Die Methode |
| 124 | +`map` wendet den Block auf die gegebene Liste von Namen an. Viele andere |
| 125 | +Ruby-Methoden lassen ähnliche Lücken offen, damit der Programmierer |
| 126 | +Details über die Vorgehensweise einfügen kann. |
| 127 | + |
| 128 | +### Ruby und Mixins |
| 129 | + |
| 130 | +Im Gegensatz zu vielen anderen objektorientierten Sprachen unterstützt |
| 131 | +Ruby nur Einfachvererbung – **mit Absicht**. Dafür kennt Ruby *Module* |
| 132 | +(in Objective-C *Categories* genannt). Module sind Methodensammlungen. |
| 133 | + |
| 134 | +Klassen können Module *einmixen* und bekommen dadurch all ihre Methoden |
| 135 | +geschenkt. Zum Beispiel kann jede Klasse, die die Methode `each` |
| 136 | +implementiert, das Modul `Enumerable` einmixen, und erhält zwei Dutzend |
| 137 | +neue Methoden, die auf `each` aufbauen (wie `map`). |
| 138 | + |
| 139 | + class MyArray |
| 140 | + include Enumerable |
| 141 | + end |
| 142 | +{: .code .ruby-code} |
| 143 | + |
| 144 | +Im Allgemeinen halten Rubyisten Mixins für klarer als Mehrfachvererbung, |
| 145 | +die komplex und einschränkend sein kann. |
| 146 | + |
| 147 | +### Rubys äußeres Design |
| 148 | + |
| 149 | +Obwohl Ruby eine eher begrenzte Zeichensetzung zu Gunsten von englischen |
| 150 | +Schlüsselworten verwendet, werden einige Zeichen zum Ausschmücken |
| 151 | +benutzt. Ruby nutzt einfache Namenskonventionen, um den Geltungsbereich |
| 152 | +von Variablen festzulegen: |
| 153 | + |
| 154 | +* `var` kann eine lokale Variable sein. |
| 155 | +* `@var` ist eine Instanzvariable. |
| 156 | +* `$var` ist eine globale Variable. |
| 157 | + |
| 158 | +Diese Vorzeichen verbessern die Lesbarkeit, indem sie dem Programmierer |
| 159 | +erlauben, die Rollen der einzelnen Variablen zu erkennen. Außerdem wird |
| 160 | +dadurch das `self.` / `this.` vor jeder Instanzvariable überflüssig. |
| 161 | + |
| 162 | +### Jenseits der Grundlagen |
| 163 | + |
| 164 | +Ruby hat eine Fülle weiterer Features, unter ihnen folgende: |
| 165 | + |
| 166 | +* Ruby kennt Exceptions wie Java oder Python, um Fehlerbehandlung zu |
| 167 | + vereinfachen. |
| 168 | +^ |
| 169 | + |
| 170 | +* Ruby hat einen echten Mark-and-Sweep-Garbage-Collector für alle |
| 171 | + Ruby-Objekte. Es ist nicht nötig, Referenzen in |
| 172 | + Erweiterungsbibliotheken zu zählen. Wie Matz sagt: “Das ist besser für |
| 173 | + die Gesundheit.” |
| 174 | +^ |
| 175 | + |
| 176 | +* C-Erweiterungen für Ruby zu schreiben ist einfacher als in Perl oder |
| 177 | + Python, da es eine sehr elegante API zum Aufrufen von Ruby aus C |
| 178 | + besitzt. Das schließt auch Aufrufe ein, um Ruby als Scriptsprache in |
| 179 | + fremde Software zu integrieren. Ein SWIG-Interface ist ebenfalls |
| 180 | + verfügbar. |
| 181 | +^ |
| 182 | + |
| 183 | +* Ruby kann Erweiterungen dynamisch laden, wenn es das Betriebssystem |
| 184 | + erlaubt. |
| 185 | +^ |
| 186 | + |
| 187 | +* Ruby hat plattformunabhängige Threads. Damit hat man unter allen |
| 188 | + Systemen, die Ruby unterstützen, auch Multithreading, sogar unter |
| 189 | + MS-DOS! |
| 190 | +^ |
| 191 | + |
| 192 | +* Ruby ist in hohem Maße portabel: Es wird vorrangig auf GNU/Linux |
| 193 | + entwickelt, arbeitet aber auf vielen UNIX-Varianten wie Mac OS X, auf |
| 194 | + Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 usw. |
| 195 | + |
| 196 | +#### Referenzen |
| 197 | + |
| 198 | +<sup>1</sup> Matz auf der Ruby-Talk-Mailingliste am [12. Mai 2000][3]. |
| 199 | +{: #fn1} |
| 200 | + |
| 201 | +<sup>2</sup> Besuche die Website von [Ruby on Rails][4], um mehr zu |
| 202 | +erfahren. |
| 203 | +{: #fn2} |
| 204 | + |
| 205 | +<sup>3</sup> Matz in [An Interview with the Creator of Ruby][5], 29. |
| 206 | +November 2001. |
| 207 | +{: #fn3} |
| 208 | + |
| 209 | +<sup>4</sup> Matz in [Blocks and Closures in Ruby][6], 22. Dezember |
| 210 | +2003. |
| 211 | +{: #fn4} |
| 212 | + |
| 213 | + |
| 214 | + |
| 215 | +[1]: http://www.rubyist.net/~matz/ |
| 216 | +[2]: http://www.tiobe.com/tpci.htm |
| 217 | +[3]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 |
| 218 | +[4]: http://rubyonrails.org/ |
| 219 | +[5]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html |
| 220 | +[6]: http://www.artima.com/intv/closures2.html |
0 commit comments