>Probablement dans tous les langages, le "ou" est implémenté de manière "paresseuse"
Non, par exemple, dans le langage Ada, il est bien précisé que l'évaluation n'est jamais paresseuse.
De plus, dans certains langages (notamment Ada, et aussi Pascal, je crois), l'ordre d'évaluation des paramètres d'un "ou" (ou d'un "et") n'est pas nécessairement le même que celui dans lequel les paramêtres apparaissent dans le code.
Cela signifie en particulier que, dans ces langages, par suite d'effets de bords, certains programmes peuvent s'exécuter différemment selon le compilateur employé. La faute au programmeur, qui aurait dû y faire attention lui-même.
>Alors pourquoi le langage la ferait-elle ?
C'est une question de standard du langage. Si la norme précise que l'évaluation est paresseuse, c'est logique, à condition toutefois que cette norme précise aussi que les arguments d'un tel "ou" sont bien évalués dans leur ordre d'apparition (si la norme spécifie qu'il y a évaluation paresseuse, mais que l'ordre d'évaluation des arguments est indéterminé, attention aux surprises!)
En revanche, si elle précise que l'évaluation n'est jamais paresseuse, pas de problème (sauf effets de bords et évaluation désordonnée).
Manifestement, la norme de php4 est silencieuse à ce sujet, ce qui signifie que l'on ne peut rien prévoir à l'avance (l'évaluation peut être ou non paresseuse, être ou non ordonnée, etc...) .
Donc le comportement observé est bien L'UN des comportements possibles de ce code, mais pas le seul.
Cela dit, à mon avis, il serait préférable que la norme précise expressément que les caractères paresseux et ordonnés des évaluations logiques ne sont pas spécifiés, cela éviterait les embrouilles.
[^] # Re: Normal
Posté par CoinKoin . En réponse au message Fonctionnement du OR. Évalué à 1.
Non, par exemple, dans le langage Ada, il est bien précisé que l'évaluation n'est jamais paresseuse.
De plus, dans certains langages (notamment Ada, et aussi Pascal, je crois), l'ordre d'évaluation des paramètres d'un "ou" (ou d'un "et") n'est pas nécessairement le même que celui dans lequel les paramêtres apparaissent dans le code.
Cela signifie en particulier que, dans ces langages, par suite d'effets de bords, certains programmes peuvent s'exécuter différemment selon le compilateur employé. La faute au programmeur, qui aurait dû y faire attention lui-même.
>Alors pourquoi le langage la ferait-elle ?
C'est une question de standard du langage. Si la norme précise que l'évaluation est paresseuse, c'est logique, à condition toutefois que cette norme précise aussi que les arguments d'un tel "ou" sont bien évalués dans leur ordre d'apparition (si la norme spécifie qu'il y a évaluation paresseuse, mais que l'ordre d'évaluation des arguments est indéterminé, attention aux surprises!)
En revanche, si elle précise que l'évaluation n'est jamais paresseuse, pas de problème (sauf effets de bords et évaluation désordonnée).
Manifestement, la norme de php4 est silencieuse à ce sujet, ce qui signifie que l'on ne peut rien prévoir à l'avance (l'évaluation peut être ou non paresseuse, être ou non ordonnée, etc...) .
Donc le comportement observé est bien L'UN des comportements possibles de ce code, mais pas le seul.
Cela dit, à mon avis, il serait préférable que la norme précise expressément que les caractères paresseux et ordonnés des évaluations logiques ne sont pas spécifiés, cela éviterait les embrouilles.