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 ri anstelle von pydoc).
  • 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 die r"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, private und protected zur 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 true und false anstelle von True und False (und nil anstelle von None).
  • Wenn sie auf Wahrheitswerte geprüft werden, werten nur false und nil zu einem falschen Wert aus. Alles andere ist wahr (einschließlich 0, 0.0, "" und []).
  • Es ist elsif anstelle von elif.
  • Es ist require anstelle von import. 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 auf nil zurü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 yield verhä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ührt yield eine 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.