216 votes

Différence entre « ou » et || en Ruby ?

Quelle est la différence entre le et opérateurs dans Ruby ? Ou est-ce juste préférence ?

305voto

mopoke Points 6437

C'est une question de priorité des opérateurs.

|| a une priorité plus forte que l' or.

Donc, entre les deux vous avez d'autres opérateurs, y compris ternaire (? :) et d'affectation (=) alors, qui que vous choisissez peuvent affecter le résultat de déclarations.

Voici un rubis de la priorité de l'opérateur de la table.

Voir cette question pour un autre exemple d'utilisation and/&&.

90voto

Jörg W Mittag Points 153275

Comme d'autres l'ont déjà expliqué, la seule différence est la priorité. Cependant, je tiens à souligner qu'il existe en fait deux différences entre les deux:

  1. and, or et not ont beaucoup plus faible l'emporte &&, || et !
  2. and et or ont la même priorité, tout en && a plus de priorité que ||

En général, il est de bon ton d'éviter l'utilisation de l' and, or et not et l'utilisation &&, || et ! à la place. (Les Rails les développeurs du noyau, par exemple, de rejeter les patches qui utilisent le mot-clé formulaires à la place de l'opérateur formes.)

La raison pour laquelle ils existent, n'est pas pour les formules booléennes, mais pour le contrôle de flux. Ils ont fait leur chemin dans Ruby via Perl est bien connu, do_this or do_that idiome, où do_this retours false ou nil si il y a une erreur et alors seulement est - do_that exécuté à la place. (De même, il est également l' do_this and then_do_that idiom.)

Exemples:

download_file_via_fast_connection or download_via_slow_connection
download_latest_currency_rates and store_them_in_the_cache

Parfois, cela peut rendre le flux de contrôle un peu plus à l'aise que d'utiliser if ou unless.

Il est facile de voir pourquoi, dans ce cas, les exploitants ont le "mal" (c'est à dire identique) priorité: ils ne montrent jamais ensemble dans la même expression de toute façon. Et quand ils ne montrent ensemble, en général, vous voulez qu'il soit évalué simplement de gauche à droite.

45voto

Eaden Points 91

et/ou sont flux de contrôle.

Ruby ne permettra pas cela comme une syntaxe valide :

Cependant, ceci est valable :

Vous pouvez faire les premiers travaux, () mais en utilisant `` est la bonne méthode.

2voto

vel pradeep Points 71

ou n'est PAS la même chose que ||

Utilisez uniquement opérateur || au lieu de ou opérateur.

Raisons :

  • ou opérateur de priorité plus basse que ||
  • ou ont priorité plus basse que l'opérateur d'affectation =
  • et et ou ont la même priorité, tout && a une priorité plus élevée que ||

1voto

cvibha Points 392

Les deux « ou » et « || » avoir la valeur true si les deux opérandes est vrai. Ils évaluent leur second opérande uniquement si la première est false.

Comme avec « et », la seule différence entre « ou » et « || » est leur priorité.

Juste pour rendre la vie intéressante, « et » et « ou » ont la même priorité, alors que « & & » a une priorité plus élevée que « || ».

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X