web-dev-qa-db-fra.com

Pouvez-vous utiliser des points-virgules en Ruby?

En apprenant Ruby, j'ai remarqué que dans tous les exemples, il n'y a pas de point-virgule. Je suis conscient que cela est parfaitement bien tant que chaque déclaration est sur sa propre ligne. Mais ce que je me demande, c'est peut vous utilisez des points-virgules dans Ruby?

71
Mark Szymanski

Oui.

Ruby ne nous oblige à utiliser aucun caractère pour séparer les commandes, sauf si nous voulons enchaîner plusieurs instructions sur une seule ligne. Dans ce cas, un point-virgule (;) est utilisé comme séparateur.

Source: http://articles.sitepoint.com/article/learn-Ruby-on-Rails/2

93
David Brown

En remarque, il est utile d'utiliser des points-virgules dans votre session (j) irb pour éviter d'imprimer une valeur d'expression ridiculement longue, par ex.

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

contre

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

Sympa surtout pour vos appels MyBigORMObject.find_all.

30
Bill Dueber

Point-virgule: oui.

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

Vous pouvez même exécuter plusieurs commandes séparées par des points-virgules dans une boucle à une ligne

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

La seule situation que j'ai rencontrée selon laquelle les points-virgules sont utiles est lors de la déclaration des méthodes d'alias pour attr_reader.

Considérez le code suivant:

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

En utilisant des points-virgules, nous pouvons réduire cela de 3 lignes:

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

Pour moi, cela n'enlève pas vraiment la lisibilité.

3
ryan

Oui, les points-virgules peuvent être utilisés comme séparateurs d'instructions dans Ruby.

Bien que mon style typique (et la plupart code que je vois) mette une ligne de code sur chaque ligne, l'utilisation de ; est assez inutile.

2
wkl

Il peut être intéressant d'utiliser des points-virgules pour conserver la syntaxe du bloc comme dans cet exemple:

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

Vous conservez une ligne de code.

0