Von Python zu Ruby
Auch Python ist (wie Ruby) eine dynamische Allzweck-Scriptsprache, und gehört somit zur engen Familie der agilen Sprachen . Im Vergleich zu Python gibt es in Ruby allerdings ein wenig mehr Syntax zu lernen. Mehr über Python findest du auf der Python-Website .
Ruby verletzt die Regeln des Python-Zen und kann Perl ähnlich sehen, was viele Pythonisten abschreckt. Bei genauerem Hinsehen wird deutlich, dass beide Sprache sehr ähnliche Ziele verfolgen, diese aber mit unterschiedlichen Mitteln erreichen.
Die Communities von Python und Ruby sind deshalb oft in produktivem Kontakt.
Ähnlichkeiten
Spracheigenschaften
- Alles ist ein Objekt , und Variablen sind Referenzen auf Objekte.
- Die Typisierung ist dynamisch, aber stark. Auch in Python ist Duck Typing verbreitet.
- Klassen sind offen und können nach Belieben erweitert werden.
- Objekte und Klassen können eigene Methoden besitzen.
- Introspektion und Meta-Programmierung sind möglich.
-
Operatoren wie
+oder[]können überschrieben werden. - Exceptions arbeiten ähnlich (wenn auch mit anderer Syntax).
Tools und Bibliotheken
-
Ruby selbst ist ein
Interpreter
:
ruby. -
Ruby hat ein
interaktives Interface
:
irb. -
Es gibt ein eingebautes
Dokumentations-Tool
:
rdoc -
Man kann die
Dokumentation über die Kommandozeile
1
lesen:
ri. - Die verbreiteten Editoren bieten mittlerweile guten Ruby-Support.
- Es gibt eine reichhaltige Bibliothek .
- Es gibt moderne Web-Frameworks ;-)
1 Zur Zeit bietet ri leider noch keine Informationen zur Sprache selbst, sondern nur zu eingebauten Klassen und Bibliotheken. Dafür gibt es die erste Version der Pickaxe (das bekannteste Ruby-Referenz-Buch) online auf Englisch oder Deutsch .
Syntax
- Anweisungen benötigen kein Semikolon und enden mit der Zeile.
- Die meisten Schlüsselworte sind dieselben wie in Python.
-
Eckige Klammern
erzeugen Listen,
geschweifte Klammern
erzeugen Hashes
(Rubys
dict
). Schlüssel und Wert werden allerdings mit
=>getrennt anstatt mit Doppelpunkten. - Auch Ruby neigt dazu, wesentlich kürzer zu sein als Java oder C.
Unterschiede
Spracheigenschaften
- Die Realisierung von Klassen , Attributen und Methoden unterscheidet sich stark von Python.
- Es gibt keine new style - und old style -Klassen.
- Man greift niemals direkt auf Instanzvariablen zu. In Ruby ruft man immer nur Methoden auf. Da in Ruby Klammern optional sind, kann man aber Methoden erstellen, die sich wie Attribute anfühlen (wie Properties in Python).
-
Es gibt
public,privateundprotected, um Zugriff auf Methoden zu steuern. - Mixins werden anstelle von Mehrfachvererbung benutzt.
- Man darf auch eingebaute Ruby-Klassen verändern.
- Es gibt Konstanten (die eine Warnung erzeugen, wenn man ihren Wert ändert.)
-
Es gibt nur einen
Listentyp
(
Array), der seinen Wert verändern kann, und der gleichzeitig als Tupel, Liste, Stack, Queue und Set fungiert. Für effiziente Mengenalgorithmen benutzt man allerdingsSet. -
In Ruby läd man
zusätzliche Dateien
mit
require 'filename'anstatt mitimport modulename. Modul- und Ordnerhierarchien sind nur durch Konvention miteinander verbunden. Es gibt keine direkten Entsprechungen zufrom...importundimport...as. -
Ruby hat
globale Variablen
(
$foo), die aber selten verwendet werden.
Strings, Symbole und Reguläre Ausrücke
- Ruby-Strings können ihren Wert ändern (sind also mutable ).
- In Ruby werden statt Strings häufig Symbole verwendet, wenn der Inhalt des Strings nicht der Ausgabe dient. Symbole sind im Gegensatz zu Strings nicht veränderbar und existieren nur einmal im Speicher.
-
In Ruby verhalten sich Strings in
'einfachen'Anführungszeichen wie Pythonsr"aw strings". -
Alle Stringtypen dürfen
mehrzeilig
sein; anstatt Triple-Quotes werden
häufig
<<-HEREDOCSeingesetzt. -
Interpretierte Stringliterale
(
"solche"und%Q[solche]) dürfen"#{Ruby-Code}"enthalten. Der Wert das Ausdrucks wird in einen String verwandelt und direkt eingefügt. -
Ruby kennt auch Pythons
Format-Strings
samt
%-Methode; man verwendet allerdings Arrays statt Tupeln, um mehrere Argumente zu übergeben. -
Für
reguläre Ausdrücke
gibt es eine
/(?:einge\baute) Synta/x. -
Die Ergebnisse des letzten Matches werden in den aus Perl bekannten
Variablen
$1,$&,$`usw. abgelegt (diese Variablen sind allerdings lokal.) Für Objektorientierte gibt es die KlassenRegexpundMatchData.
Syntax
-
Einrückung
ist in Ruby freiwillig. Mehrzeilige Anweisungen werden mit
endbeendet. -
Kein explizites
selfin Methodensignaturen. - Ruby hat Blöcke , die vielfältig eingesetzt werden.
- In Ruby ist alles ein Ausdruck , so dass Code-Elemente fast beliebig kombiniert werden können.
-
Implizites
return: Der Wert des letzten Ausdrucks einer Methode wird zurückgegeben. Man kannreturnaber auch wie in Python explizit angeben. - Es gibt ein paar erzwungene Namenskonventionen (z.B. beginnen Klassennamen immer mit einem Großbuchstaben, Variablen werden dagegen klein geschrieben.)
-
Methoden können
ohne Klammern
aufgerufen werden (
require 'set'usw.) Das hat zur Folge, dass man auf Methodenobjekte nur überobj.method :namezugreifen kann, die dann mittelsmeth.callodermeth[]aufgerufen werden. -
Instanzen
werden mit
Foo.newerstellt, nicht mitFoo(). Die zugehörige Methode heißtinitializestatt__init__. -
true,falseundnilsind RubysTrue,FalseundNone. -
In
Bedingungen
sind
nur
die Werte
nilundfalsenegativ. Alles andere (0, leere Strings und Listen usw.) ist positiv. -
Ruby benutzt
elsifstattelif. -
Namespaces
werden mit dem
::-Operator verknüpft, mit dem man auch auf Konstanten wieMath::PIzugreift. - Ruby hat keine echten Keyword-Argumente; stattdessen werden Hashes mit optionalen Klammern eingesetzt.
-
Ruby hat keine List-Comprehensions; stattdessen benutzt man die Methoden des
Moduls
Enumerable.
Konventionen
-
Namen
: Methoden und Variablen jeder Art sind
under_score, KlassenCapitalCaseund KonstantenALL_CAPITAL_CASE. - Kommentare stehen über den Methoden und Klassen, wie in Java.
- Das Ändern eingebauter Klassen ist nicht geächtet, sondern wird fröhlich praktiziert.
- Eingerückt wird mit zwei Leerzeichen.
rubyforge.org rubyforge.org rubyforge.org rubyforge.org rubyforge.org forum.ruby-portal.de radiantcms.org tryruby.hobix.com