Gibt es Aufgaben, die mit Ruby deutlich weniger Arbeit erfordern als mit C # 4.0?

8

Ich habe gerade das Ruby-Kapitel des Buches 7 Sprachen in 7 Wochen gelesen . Abgesehen von etwas syntaktischem Zucker hier und da kann ich nichts sehen, was mit C # mit einer ähnlichen Syntax nicht möglich ist. Ich verstehe, dass beide Sprachen von Natur aus unterschiedlich sind, aber meine Frage bezieht sich eher auf die Verwendung als auf das Design.

Relevante Fragen lassen mich glauben, dass Ruby kaum mehr als C # bietet:

Ich habe kaum mit Ruby gearbeitet und mein Verständnis der Sprache ist immer noch sehr begrenzt. Vielleicht kann jemand, der sowohl mit .NET 4.0 als auch mit Ruby experimentiert hat, mit konkreten Beispielen antworten.

Welche Aufgaben erfordern mit Ruby deutlich weniger Arbeit als C # 4.0?

Ps: Diese Frage wurde bei StackOverflow als zu subjektiv und argumentativ geschlossen, obwohl sie einige Aufmerksamkeit auf sich gezogen hat. Ich hatte gehofft, dass es hier zusammengeführt wird, aber stattdessen muss ich es einfach neu veröffentlichen.

Steven Jeuris
quelle
1
Wäre das Kompilieren einer von ihnen?
Andrew Grimm
Diese Frage würde mich interessieren, da ich davon ausgehe, dass C # schneller ist und eine größere Community als Ruby hat.
Andrew Grimm

Antworten:

7

Ruby verfügt über Literale für reguläre Ausdrücke und eine Reihe nützlicher syntaktischer Verknüpfungen zum Erstellen / Interpolieren von Zeichenfolgen. Wenn Ihre Aufgabe (n) in erster Linie mit dem Mischen von übereinstimmenden Teilen von Zeichenfolgen zusammenhängen, erfordert Ruby möglicherweise erheblich weniger Arbeit (aber abgesehen von kurzen Hilfsskripten muss ich zugeben, dass dies eine sehr seltene Situation ist).

Relevanter sind Rubys Metaprogrammierfunktionen. dh #eval, #define_methodund Freunde, die mit kombinierten open classes, #includeund #extendermöglichen es Ihnen , Tonnen Standardcode zur Laufzeit erstellen - Sie können argumentieren, dass die Code - Generatoren / Assistenten geben Ihnen einige der Vorteile, aber Sie haben leben mit der - möglicherweise sehr großen Mengen - des generierten Kesselplattencodes im Vergleich zu einer relativ kleinen Menge an Meta-Programmiercode, die Sie lesen und verstehen müssten.

Ein typischer Anwendungsfall hierfür ist die Verbindung mit einem dynamischen Datenanbieter außerhalb Ihrer Anwendung. Rails ActiveRecord ist dafür ein gutes Beispiel.

In Zukunft könnte dies für die Entwicklung von GUIs sehr nützlich sein, da Sie Methoden zur Behandlung von Ereignissen aus Elementen der Benutzeroberfläche generieren können, indem Sie zur Laufzeit Methoden erstellen, die auf der ID, dem Typ, den Eingabewerten usw. der Benutzeroberflächenelemente basieren (z. B. Objective-C für Steroide) Wir werden etwas von dieser Kraft sehen, wenn MacRuby reift.

Die Grenze zwischen guter Nutzung und schrecklichem Missbrauch dieser Funktion ist jedoch sehr, sehr dünn und führt meiner Erfahrung nach zu einer Hauptursache für Kopfschmerzen in großen Ruby-Projekten (on Rails). Sei also vorsichtig, wenn du dich entscheidest, den Dschinn aus der Flasche zu nehmen :)

Alexander Battisti
quelle
Gute Antwort! Eine einfachere String-Manipulation ist sinnvoll, da Ruby on Rails vermutlich ein Web-Framework ist. Ich müsste die Metaprogrammierung einmal vergleichen, um zu sehen, ob ein bestimmtes Ziel in Ruby einfacher erreicht werden kann als in C #. Wenn Sie zufällig ein interessantes konkretes (nicht zu großes) Beispiel hätten, wäre das schön. ; p
Steven Jeuris
Wie gesagt, die ActiveRecord-Bibliothek / das ActiveRecord-Framework ist ein konkretes Beispiel.
Alexander Battisti