Von Ruby nach Python
Python ist eine weitere sehr gute Allzweck-Programmiersprache. Wenn Sie von Python zu Ruby wechseln, werden Sie feststellen, dass es etwas mehr Syntax zu lernen gibt als bei Python.
Ähnlichkeiten
Wie bei Python, auch in Ruby...
- Es gibt eine interaktive Eingabeaufforderung (genannt
irb). - Sie können Dokumentationen auf der Kommandozeile lesen (mit dem Befehl
rianstelle vonpydoc). - Es gibt keine speziellen Zeilenabschlüsse (außer dem üblichen Zeilenumbruch).
- Zeichenkettenliterale können sich über mehrere Zeilen erstrecken, ähnlich wie die dreifach zitierten Zeichenketten von Python.
- Eckige Klammern sind für Listen und geschweifte Klammern für Dictionaries (die in Ruby "Hashes" genannt werden).
- Arrays funktionieren gleich (sie zu verketten ergibt ein langes Array, aber sie auf diese Weise zu komponieren
a3 = [ a1, a2 ]ergibt ein Array von Arrays). - Objekte sind stark und dynamisch typisiert.
- Alles ist ein Objekt, und Variablen sind nur Referenzen auf Objekte.
- Obwohl die Schlüsselwörter etwas anders sind, funktionieren Ausnahmen (Exceptions) fast genauso.
- Sie haben integrierte Dokumentationswerkzeuge (Rubys Werkzeug heißt rdoc).
- Es gibt gute Unterstützung für funktionale Programmierung mit Funktionen erster Klasse, anonymen Funktionen und Closures.
Unterschiede
Im Gegensatz zu Python, in Ruby...
- Zeichenketten sind veränderlich.
- Sie können Konstanten erstellen (Variablen, deren Wert Sie nicht ändern möchten).
- Es gibt einige erzwungene Groß-/Kleinschreibungs-Konventionen (z. B. Klassennamen beginnen mit einem Großbuchstaben, Variablennamen mit einem Kleinbuchstaben).
- Es gibt nur eine Art von Listenbehälter (ein Array), und dieser ist veränderlich.
- Doppelt zitierte Zeichenketten erlauben Escape-Sequenzen (wie
\t) und eine spezielle "Expression Substitution"-Syntax (die es Ihnen ermöglicht, die Ergebnisse von Ruby-Ausdrücken direkt in andere Zeichenketten einzufügen, ohne"add " + "strings " + "together"schreiben zu müssen). Einfach zitierte Zeichenketten sind wie dier"rohen Zeichenketten"von Python. - Es gibt keine "neuen Stil" und "alten Stil" Klassen. Nur eine Art. (Python 3+ hat dieses Problem nicht, ist aber nicht vollständig abwärtskompatibel mit Python 2.)
- Sie greifen niemals direkt auf Attribute zu. Mit Ruby sind es alles Methodenaufrufe.
- Klammern für Methodenaufrufe sind meist optional.
- Es gibt
public,privateundprotectedzur Erzwingung des Zugriffs, anstelle von Pythons_freiwilliger_Unterstrich-Konvention__convention__. - Statt Mehrfachvererbung werden "Mixins" verwendet.
- Sie können Methoden von eingebauten Klassen hinzufügen oder modifizieren. Beide Sprachen erlauben es Ihnen, Klassen jederzeit zu öffnen und zu ändern, aber Python verhindert die Änderung von eingebauten Klassen - Ruby tut dies nicht.
- Sie haben
trueundfalseanstelle vonTrueundFalse(undnilanstelle vonNone). - Wenn sie auf Wahrheitswerte geprüft werden, werten nur
falseundnilzu einem falschen Wert aus. Alles andere ist wahr (einschließlich0,0.0,""und[]). - Es ist
elsifanstelle vonelif. - Es ist
requireanstelle vonimport. Ansonsten ist die Verwendung aber gleich. - Die üblichen Kommentare in den Zeilen *über* Dingen (anstelle von Docstrings darunter) werden zur Generierung von Dokumentationen verwendet.
- Es gibt eine Reihe von Abkürzungen, die zwar mehr zu merken bedeuten, aber die man schnell lernt. Sie machen Ruby tendenziell Spaß und sehr produktiv.
- Es gibt keine Möglichkeit, eine Variable nach der Zuweisung wieder zu löschen (wie die
del-Anweisung von Python). Sie können eine Variable aufnilzurücksetzen, wodurch der alte Inhalt vom Garbage Collector freigegeben werden kann, aber die Variable bleibt in der Symboltabelle, solange sie im Gültigkeitsbereich ist. - Das Schlüsselwort
yieldverhält sich anders. In Python gibt es die Ausführung an den Geltungsbereich außerhalb des Funktionsaufrufs zurück. Externer Code ist dafür verantwortlich, die Funktion fortzusetzen. In Ruby führtyieldeine andere als letzte übergebene Funktion aus und wird dann sofort fortgesetzt. - Python unterstützt nur eine Art von anonymen Funktionen, Lambdas, während Ruby Blöcke, Procs und Lambdas enthält.