[ASP]Horreur inside!!! lisez moi ca

Horreur inside!!! lisez moi ca [ASP] - Programmation

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...
Reply

Marsh Posté le 29-03-2002 à 16:02:28   

Reply

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


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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...


---------------
Narf... It is broken...
Reply

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.

Reply

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" );


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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... :(


---------------
Narf... It is broken...
Reply

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?? ;)

Reply

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 :)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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)

Reply

Marsh Posté le 30-03-2002 à 11:27:06    

Pour ceux que ca interesse, on appelle ca l'evalutation paresseuse.

Reply

Marsh Posté le 30-03-2002 à 11:27:06   

Reply

Marsh Posté le 30-03-2002 à 11:35:58    

et en VB c pareil ... donc en vbscript c t a prevoir

Reply

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.


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed