Warum gibt es so viele verschiedene Möglichkeiten, dasselbe in Ruby zu machen?

8

Ich lerne Ruby. Mein Hintergrund ist C ++ / Java / C #. Insgesamt mag ich die Sprache, aber ich bin ein wenig verwirrt darüber, warum es so viele verschiedene Möglichkeiten gibt, dasselbe zu erreichen, jedes mit einer eigenen etwas anderen Semantik.

Nehmen Sie zum Beispiel eine String-Erstellung vor. Ich kann '', '', q%, Q% oder nur% verwenden, um Strings zu erstellen. Einige Formulare unterstützen die Interpolation. Andere Formen erlauben mir, die Trennzeichen für Zeichenfolgen anzugeben.

Warum gibt es fünf Möglichkeiten, String-Literale zu erstellen? Warum sollte ich jemals nicht interpolierte Strings verwenden? Welchen Vorteil hat die% -Syntax gegenüber zitierten Literalen?

Ich weiß, dass es in Rubin einen Wert in der Redundanz geben muss, aber meine untrainierten Augen sehen es nicht klar. Bitte erleuchte mich.

    
Ryan Michela 25.11.2009, 14:04
quelle

9 Antworten

15
  

Warum sollte ich jemals nicht interpolierte Strings verwenden?

Wenn Sie die Interpolation natürlich nicht wollen. Zum Beispiel geben Sie vielleicht eine Dokumentation über die String-Interpolation aus:

%Vor%
  

Welchen Vorteil hat die% -Syntax gegenüber zitierten Literalen?

Es erlaubt Ihnen, Strings natürlicher zu schreiben, ohne die Anführungszeichen, oder wenn Sie nicht vielen Dingen entgehen wollen, analog zu C # 's String-Literal Präfix @ .

%Vor%

Es gibt viele andere% -Notierungen:

%Vor%

Es gibt auch %s (für Symbole) und einige andere.

  

Warum gibt es fünf Möglichkeiten, String-Literale zu erstellen?

Das ist nicht besonders ungewöhnlich. Betrachten Sie zum Beispiel C #, das verschiedene Möglichkeiten zum Erzeugen von Strings bietet: new String() ; %Code%; %Code%; "" und so weiter.

    
John Feminella 25.11.2009, 14:18
quelle
3

Ich bin kein Ruby-Experte, aber haben Sie jemals den Begriff "syntaktischer Zucker" gehört? Grundsätzlich bieten einige Programmiersprachen unterschiedliche Syntax, um die gleiche Aufgabe zu erfüllen. Manche Leute könnten einen Weg leichter finden als andere aufgrund seiner früheren Programmier- / Syntaxerfahrung.

    
Andres 25.11.2009 14:14
quelle
2

In den meisten Fällen werden Sie normale String-Trennzeichen verwenden. Der Hauptunterschied zwischen einfachen und doppelten Anführungszeichen besteht darin, dass doppelte Anführungszeichen Ihnen erlauben, Variablen zu interpolieren.

%Vor%

%q und %Q sind nützlich, wenn Sie keine Anführungszeichen verwenden können, da sie Teil der internen Zeichenfolge sind. Zum Beispiel könnten Sie am Ende schreiben

%Vor%

In diesem Fall dürfen Sie keine Anführungszeichen als Trennzeichen verwenden, es sei denn, Sie möchten interne Attributtrennzeichen umgehen. Außerdem können Sie kein einfaches Anführungszeichen verwenden, da die Variable img_path nicht interpoliert wird.

    
Simone Carletti 25.11.2009 14:16
quelle
1

Viele Ruby-Syntax wird von Perl abgeleitet, wie zum Beispiel q , um ein paar Wörter in eine Zeichenfolge zu zitieren. Das ist wahrscheinlich der Hauptgrund für solch eine große Vielfalt.

    
abyx 25.11.2009 14:11
quelle
1

Ein weiterer Grund ist ein kleiner Leistungsschub für nicht interpolierte Strings. '' Vs '' bedeutet, dass Ruby nicht berücksichtigen muss, was sich in der Zeichenfolge überhaupt befindet. Sie sehen also, dass Benutzer einfache Anführungszeichen für Array-Schlüssel oder -Symbole verwenden, weil sie schneller sind. Für was es wert ist, werde ich ein kleines Benchmark enthalten.

%Vor%

ergibt:

%Vor%     
Chuck Vose 25.11.2009 16:15
quelle
0

Sie würden nicht interpolierte Strings verwenden, wenn Ihre Zeichenfolge viele Sonderzeichen enthält (wie Backslashes, #{} usw.) und Sie nicht alle entzweien wollen.

Sie würden verschiedene Trennzeichen verwenden, wenn Ihre Zeichenfolge eine Menge Anführungszeichen enthält, die Sie andernfalls zu vermeiden hätten.

Sie würden heredocs verwenden, wenn Ihre Strings viele Zeilen haben, die die normale Stringsyntax unhandlich erscheinen lassen würden.

    
sepp2k 25.11.2009 14:18
quelle
0

Ruby leiht Konstrukte und Ideen aus vielen Sprachen. Die beiden offensichtlichsten Einflüsse sind Smalltalk und Perl.

Abhängig von Ihrem Komfort mit Smalltalk oder Perl können Sie verschiedene Konstrukte wählen, um das gleiche zu tun.

    
daf 25.11.2009 14:25
quelle
0

Entlang der Linie von Johns Antwort: In schnellen Hacks lasse ich oft einen Perl- oder Sed-Einliner mit Grep-Syntax aus meinem Ruby-Skript laufen. Wenn ich %[ ] type syntax verwenden kann, kann ich meine regexp einfach vom Terminal kopieren / einfügen

    
Yannick Wurm 25.11.2009 17:51
quelle
0

Die ursprüngliche Frage ist, warum es in Ruby so viele verschiedene Vorgehensweisen gibt.

Manchmal sind die verschiedenen Dinge sinnvoll: Zitat ist ein guter Fall, wo unterschiedliches Verhalten eine andere Syntax benötigt - nicht / interpolierend, alternative zitierende Zeichen, etc. - und historischer Zufall verursacht Synonyme wie% x () vs '', ähnlich wie in Perl.

Das Synonymproblem - [] .size [] .length [] .count - fühlt sich an wie ein Versuch in einer Welt hilfreich zu sein, in der die Sprache zu zufällig ist, um IDEs helfen zu können: Affepatching und das Seltsame Die Kombination von strenger, aber dynamischer Typisierung macht Laufzeitfehler zu einem unvermeidlichen und frustrierenden Teil der Programmierung, daher versuchen die Leute, das Problem durch die Bereitstellung von Synonymen zu reduzieren. Leider verwirren sie Programmierer, die an verschiedene Methoden gewöhnt sind, die verschiedene Dinge tun.

Das Problem "so ähnlich, aber nicht ganz", zum Beispiel ...

%Vor%

... kann nur wirklich als Fehler angesehen werden. Jede Sprache hat sie, aber sie sind normalerweise arkaner als das.

Und dann gibt es die einfache, willkürliche 'Verwendung scheitern, anstatt zu erhöhen, es sei denn, Sie wiederholen gerade eine Ausnahme' Unsinn in den Rubocop Codierungsstandards.

Es gibt ein paar nette Dinge in Ruby, aber wirklich - ich würde eher etwas besser fundiertes programmieren.

    
android.weasel 18.01.2016 10:31
quelle

Tags und Links