Horreur inside!!! lisez moi ca [ASP] - Programmation
Marsh Posté le 29-03-2002 à 16:21:14
C'est un choix de tester toutes les opérandes.
En effet, il peut y avoir des effets de bord, du genre ta fonction "functionN" peut très bien écrire dans un fichier ou une BDD.
Si tu ne veux pas d'effet de bord, tu fais çà :
if (cond1 or cond2) then
if (functionN) then
...
end if
...
end if
Marsh Posté le 29-03-2002 à 16:25:53
Mara's dad a écrit a écrit : C'est un choix de tester toutes les opérandes. En effet, il peut y avoir des effets de bord, du genre ta fonction "functionN" peut très bien écrire dans un fichier ou une BDD. Si tu ne veux pas d'effet de bord, tu fais çà : if (cond1 or cond2) then if (functionN) then ... end if ... end if |
oui c ce que j'ai dufaire, mais c'est debile! j'ai fais du C/C++ et je suis sur que meme en PhP il teste pas tout!
jsuis sur que c'est meme pas marqué dans la doc ca...
Marsh Posté le 29-03-2002 à 16:30:04
DLR a écrit a écrit : oui c ce que j'ai dufaire, mais c'est debile! j'ai fais du C/C++ et je suis sur que meme en PhP il teste pas tout! jsuis sur que c'est meme pas marqué dans la doc ca... |
C'est pas si débile que ca. Je sais que ca porte un nom les opérateur logiques pour lequel l'ordre d'évaluation des argument n'est pas défini.
Y a quelques langages qui font ca ... Suffit de le savoir.
Marsh Posté le 29-03-2002 à 16:40:56
Et PHP, c'est pareil qu'en C/C++, l'évaluation des expression Booléennes sont court-circuité.
C'est pour çà qu'en PHP on voit souvent
mysql_connect(....) or die("Connection impossible" );
Marsh Posté le 29-03-2002 à 16:47:09
Mara's dad a écrit a écrit : Et PHP, c'est pareil qu'en C/C++, l'évaluation des expression Booléennes sont court-circuité. C'est pour çà qu'en PHP on voit souvent mysql_connect(....) or die("Connection impossible" ); |
Perl aussi...
tiens c'est bizarre c'est dans les meilleurs langages (langages les + utilisé, donc discutable sur le terme meilleur) que l'on retrouve ce court-cicuitage...
je viens d'etre tres decu par l'ASP...
Marsh Posté le 29-03-2002 à 17:08:12
En Java (et C aussi, il me semble, mais je peux me tromper), le "&" (ou le "|" ) évalue ses DEUX opérandes, et donne un résultat, mais le "&&" (ou le "||" ) commence par évaluer le premier opérande, et n'évalue le second que si nécessaire....
pratique, non??
Marsh Posté le 29-03-2002 à 20:32:17
Je vais peut-être dire une bêtise, mais il me semble que le C/C++ commence l'évaluation à partir de la droite, non ?
Peut-être qu'ici pour l'ASP c'est aussi le cas, donc il faut inverser les deux opérandes du AND.
En tout cas je sais qu'en Pascal il commence par la gauche :
if (ListView1.Selected <> nil) and (ListView1.Selected.Data <> nil) then
ça marche très bien... Le contraire plante si Selected est nil évidemment
Marsh Posté le 30-03-2002 à 08:47:32
DLR a écrit a écrit : je faisais mon ptit bonhomme de chemin en ASP, et tout a coup je me rencontre qu'une fonction est appellée alors qu'elle ne devrait pas... bon, je matte le code, c'est du genre: if (cond1 or cond2) and (functionN) then ... end if cond1 et cond2 sont fausse, ce qui me donne if false and ? then ... et ho! horreur! l'heretic a encore frappé! je me rencontre que le code de functionN est quand meme executé aux cas ou 'false and ?' ca donnerait true!!!! comment se demerde ASP pour tester les conditions? il ne respecte meme pas cette regle de logique? dans quel ordre ASP test-il ses 'if'? |
y'a pas d'ordre il test les 2 c tout et analyse ensuite.
par contre asp.net corrige ça et si tu fais "if condition1 and condition2" et que condition1 est false, alors il évalude pas condition2 (de la même manière si t'as "if condition1 or condition2" et que condition1 est vrai, il évalue pas condition2)
Marsh Posté le 30-03-2002 à 11:27:06
Pour ceux que ca interesse, on appelle ca l'evalutation paresseuse.
Marsh Posté le 30-03-2002 à 12:34:48
DLR a écrit a écrit : Perl aussi... tiens c'est bizarre c'est dans les meilleurs langages (langages les + utilisé, donc discutable sur le terme meilleur) que l'on retrouve ce court-cicuitage... je viens d'etre tres decu par l'ASP... |
Le PERL et le PHP sont dérivés du C/C++ donc C normal que le fonctionnement de l'évaluation des tests soit le même.
Marsh Posté le 29-03-2002 à 16:02:28
je faisais mon ptit bonhomme de chemin en ASP, et tout a coup je me rencontre qu'une fonction est appellée alors qu'elle ne devrait pas...
bon, je matte le code, c'est du genre:
if (cond1 or cond2) and (functionN) then
...
end if
cond1 et cond2 sont fausse, ce qui me donne
if false and ? then ...
et ho! horreur! l'heretic a encore frappé! je me rencontre que le code de functionN est quand meme executé aux cas ou 'false and ?' ca donnerait true!!!!
comment se demerde ASP pour tester les conditions? il ne respecte meme pas cette regle de logique?
dans quel ordre ASP test-il ses 'if'?
---------------
Narf... It is broken...