Y a-t-il une sagesse derrière & 8282; et # 8221 ;, & # 8220; ou & # 8221; opérateurs en Ruby?

StackOverflow https://stackoverflow.com/questions/1434842

Question

Je me demande pourquoi ruby ??donne à et , ou une priorité inférieure à & amp; & amp; , || , et assigner un opérateur? Y a-t-il une raison?

Était-ce utile?

La solution

Je pense que c'est un report direct de Perl. Les opérateurs ou et et ont été ajoutés ultérieurement dans Perl 5 pour des situations spécifiques dans lesquelles une priorité inférieure était souhaitée.

Par exemple, en Perl, nous souhaitons ici que || ait une priorité inférieure, de sorte que nous puissions écrire:

try to perform big long hairy complicated action     || die ;

et assurez-vous que le || ne va pas engloutir une partie de l'action. Perl 5 a introduit ou , une nouvelle version de || peu prioritaire, dans ce but précis.

Un exemple dans Ruby où vous pouvez utiliser ou mais pas || :

value = possibly_false or raise "foo"

Si vous utilisiez || , ce serait une erreur de syntaxe.

Autres conseils

La différence est la priorité. || , & amp; & amp; ont une priorité supérieure à = , mais et , ou avoir plus bas. Donc, tant que vous pouvez faire:

a = nil || 0

Il vous faudrait faire:

a = (nil or 0)

pour obtenir le même effet. Si vous le faites:

a = nil or 0

Le résultat de l'expression serait toujours 0, mais une valeur serait nil.

Ils ont une priorité très faible, de sorte que les opérandes ne doivent pas nécessairement être placés entre parenthèses, comme cela est parfois le cas avec & amp; & amp; et || .

Il est parfois utile de pouvoir contrôler la priorité de vos opérateurs, en particulier si vous êtes soucieux de lisibilité: une parenthèse supplémentaire dans les instructions conditionnelles peut parfois masquer la logique réelle.

Pour être franc, cependant, je pense que la raison pour laquelle Ruby a les niveaux de priorité des opérateurs booléens provient principalement du fait que Matz était un programmeur Perl avant d’avoir écrit Ruby, et qu’il a emprunté une grande partie de la syntaxe de base et des opérateurs. langue.

Je pense que l’idée est précisément de les placer en dessous des opérateurs d’affectation afin que vous puissiez écrire des tests logiques avec des affectations mais sans parenthèses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top