Können Sie in Ruby Semikolons verwenden?

75

Beim Erlernen von Ruby habe ich festgestellt, dass in allen Beispielen keine Semikolons vorhanden sind. Mir ist bewusst, dass dies vollkommen in Ordnung ist, solange jede Aussage in einer eigenen Zeile steht. Aber ich frage mich, können Sie in Ruby Semikolons verwenden?

Mark Szymanski
quelle
Und zu den Ruby-Leuten da draußen: Sollte man Semikolons verwenden? Gibt es einen Vorteil dabei? Ich weiß, dass ich beim Schreiben von Ruby-Code diese reflexartig hinzufüge.
Andy Lester
@Andy Verwenden Sie keine Semikolons, es sei denn, Sie möchten mehrere Anweisungen in eine Zeile setzen, was Sie sowieso vermeiden sollten .
Yaser Sulaiman
@ Yaser: Ich brauche Semikolons. Denn wenn es eine Funktion in einer Zeile ohne Semikolon gibt, vim Autoindents für mich, die ich nicht möchte.
Mark Szymanski
Vielleicht möchten Sie eine Frage dazu stellen, denn es gibt ein paar Leute, die Vim mit Rubin verwenden.
Andrew Grimm
Der Link im Kommentar von @YaserSulaiman gibt das Argument an, dass Semikolons Code weniger lesbar und hässlich machen. Es ist eine gültige Meinung, aber es ist eine Meinung.
Tony

Antworten:

99

Ja.

Ruby verlangt nicht, dass wir Zeichen verwenden, um Befehle zu trennen, es sei denn, wir möchten mehrere Anweisungen in einer einzigen Zeile miteinander verketten. In diesem Fall wird ein Semikolon (;) als Trennzeichen verwendet.

Quelle: http://articles.sitepoint.com/article/learn-ruby-on-rails/2

David Brown
quelle
2
aber sollte ich Semikolon verwenden?
Raketenabstandhalter
1
@rocketspacer Das ist eine ganz andere Frage
ATLief
37

Als Randnotiz ist es nützlich, Semikolons in Ihrer (j) irb-Sitzung zu verwenden, um zu vermeiden, dass ein lächerlich langer Ausdruckswert ausgedruckt wird, z

irb[0]> x = (1..1000000000).to_a
[printout out the whole array]

vs.

irb[0]> x = (1..100000000).to_a; nil

Besonders schön für Ihre MyBigORMObject.find_all-Aufrufe.

Bill Dueber
quelle
6

Semikolon: ja.

irb(main):018:0> x = 1; c = 0
=> 0
irb(main):019:0> x
=> 1
irb(main):020:0> c
=> 0

Sie können sogar mehrere durch Semikolons getrennte Befehle in einer einzeiligen Schleife ausführen

irb(main):021:0> (c += x; x += 1) while x < 10
=> nil
irb(main):022:0> x
=> 10
irb(main):023:0> c
=> 45
Sophia Feng
quelle
3

Ja, Semikolons können in Ruby als Anweisungstrennzeichen verwendet werden.

Obwohl mein typischer Stil (und der meiste Code, den ich sehe) eine Codezeile in jede Zeile einfügt, ist die Verwendung von ;ziemlich unnötig.

wkl
quelle
3

Die einzige Situation, auf die ich gestoßen bin, dass Semikolons nützlich sind, ist das Deklarieren von Alias-Methoden für attr_reader.

Betrachten Sie den folgenden Code:

attr_reader :property1_enabled
attr_reader :property2_enabled
attr_reader :property3_enabled

alias_method :property1_enabled?, :property1_enabled
alias_method :property2_enabled?, :property2_enabled
alias_method :property3_enabled?, :property3_enabled

Durch die Verwendung von Semikolons können wir dies um 3 Zeilen reduzieren:

attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled
attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled
attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled

Für mich beeinträchtigt dies nicht wirklich die Lesbarkeit.

Ryan
quelle
1

Es kann interessant sein, Semikolons zu verwenden, um die Blocksyntax wie in diesem Beispiel beizubehalten:

a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h }

Sie pflegen eine Codezeile.

Jérôme-Victor Toulouse
quelle