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:
- Warum werden C # -Programmierer nicht wie Java-Programmierer zu Ruby hingezogen?
- Ist Rubys Codeblock der gleiche wie der Lambda-Ausdruck von C #?
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.
quelle
Antworten:
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_method
und Freunde, die mit kombiniertenopen classes
,#include
und#extend
ermö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 :)
quelle