10
votes

Y a-t-il une sagesse derrière "et", "ou" des opérateurs de rubis?

Je me demande pourquoi rubis donner et , ou moins prême que && , || et attribuer l'opérateur ? Y a-t-il une raison?


0 commentaires

5 Réponses :


4
votes

Être capable de contrôler la préséance de vos opérateurs est parfois utile, surtout si vous êtes préoccupé par la lisibilité - une parenthèse supplémentaire dans des états conditionnels peut parfois obscurcir la logique réelle.

Pour être franc, cependant, je pense que la raison pour laquelle Ruby a le niveau de priorité de l'opérateur booléen qu'il découle principalement du fait que Matz était un programmeur Perl avant d'écrire Ruby et a emprunté une grande partie de la syntaxe de base et des opérateurs de celui-ci. langue.


1 commentaires

HMM, qui explique pourquoi Ruby est si immature et en même temps tellement gonflé. Toujours difficile à envelopper la tête autour de ça ..



5
votes

Ils ont une grande préconcience de manière à ce que les opérandes ne soient pas enveloppés entre parenthèses, comme c'est parfois le cas avec && et ||


0 commentaires

2
votes

Je crois que l'idée est spécifiquement de les obtenir en dessous des opérateurs d'affectation, vous pouvez donc écrire des tests de logique avec des missions mais sans parens.


0 commentaires

15
votes

Je suppose que c'est un report direct de Perl. Les opérateurs ou et et ont été ajoutés plus tard dans Perl 5 pour des situations spécifiques ont été souhaitées que la priorité était souhaitée.

Par exemple, dans Perl, nous souhaitons ici que || avait une priorité inférieure, afin que nous puissions écrire: xxx

et assurez-vous que le || n'allait pas gobbler partie de l'action. Perl 5 introduit ou , une nouvelle version de || qui a une priorité faible, pour exactement ce but.

Un exemple en rubis où vous pourriez utiliser ou mais pas || : xxx

si vous avez utilisé || , il serait être une erreur de syntaxe.


4 commentaires

Y a-t-il un nom pour l'idiome de do_something ou mourir? Est-ce qu'il est utilisé dans Ruby?


Je ne sais aucun nom pour cela, mais c'est assez courant dans Ruby.


Perl se penche fortement sur mourir, alors que Ruby utilise la levée. L'avantage d'une exception est que vous pouvez le sauver.


Bien que techniquement, vous puissiez sauver d'une matrice, les gens ne se dérangent généralement pas à moins que ce soit vraiment important. C'est trop d'une nuisance.



8
votes

La différence est la priorité. || , && a une priorité supérieure à celle = , mais et , ou ont inférieur. Donc, alors que vous pouvez faire: xxx

vous devriez faire: xxx

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

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


0 commentaires