5 votes

Court-circuitage : OrElse combiné à Or

Si j'ai les éléments suivants...

a OrElse b 

... et un est Véritable alors il est clair que b n'est jamais évalué. Mais si j'ajoute un Or alors quoi ?

a OrElse b Or c

Doit-il/elle se faire évaluer ? Et si je mets des parenthèses ?

Je m'excuse si cela est élémentaire. Bien sûr, je peux tester moi-même la réponse, mais je ne trouve pas de réponse à cette question ici ou ailleurs. Beaucoup de questions portant sur Ou contre OuElse mais rien qui concerne Ou avec OuElse

5voto

msarchet Points 9059

OrElse court-circuite les paramètres des côtés gauche et droit (seulement 2 paramètres). Je dirais donc que C sera toujours évaluée, car vous pourriez la traiter comme une (A OrElse B) Or C .

MSDN OrElse

3voto

Anax Points 5163

Dans le cas présenté, c est évaluée. Un petit test vous le dira :

Debug.WriteLine(test(1) OrElse test(2) Or test(3))

Function test(ByVal a As Integer) As Boolean

    Debug.WriteLine(a)
    Return True

End Function

L'exemple ci-dessus produit des résultats :

1
3
True

3voto

Joel Coehoorn Points 190579

Il s'agit d'un problème de précédence des opérateurs. La documentation pertinente se trouve ici :
http://msdn.microsoft.com/en-us/library/fw84t893.aspx?ppud=4

Les extraits importants :

  • Les opérateurs ayant la même préséance sont évalués de gauche à droite dans l'ordre dans lequel ils apparaissent dans l'expression.

et

Disjonction inclusive ( Ou, OuElse )

Nous apprenons donc ici que Or et OrElse ont la même précédence et que les opérateurs ayant la même précédence sont évalués de gauche à droite.

Par conséquent, je m'attendrais à ce que dans les cas où a est vrai, b n'est pas évalué. Cependant, c le sera toujours. Dans les cas où a est fausse, b est évaluée et, quel que soit le b l'opérateur Or évaluera la valeur de c . Donc, oui, c est toujours évalué.

En pratique, vous devriez généralement préférer OrElse dans votre code sauf si vous avez une bonne raison d'utiliser Or . Or existe maintenant principalement pour la rétrocompatibilité.

-1voto

Cericme Points 101

D'après mon expérience personnelle, VB a tendance à obtenir la valeur de tous ces éléments, qu'ils soient réellement évalués ou non.

Cela n'est utile que lorsque l'ordre est important pour l'existence des articles et autres. Je voulais juste le noter.

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