jeudi 31 août 2006
Test de valeurs, PHP & Ruby
Par Christophe, jeudi 31 août 2006 à 16:56 :: Développement
Petites informations pour la route (notez que iphp, c'est ça) :
christophe@monica:~$ iphp >> 0 == true => false >> '0' == true => false >> '1' == true => true
Ceux qui font du php le savaient déjà, 0 est faux, un string est vrai, mais vous remarquerez la chaine '0' est fausse, certainement parce qu'elle a été convertie en INT, cependant en ruby nous avons :
christophe@monica:~$ irb --simple-prompt >> 0 == 1 => false >> 0 == true => false >> 1 == true => false
Pourquoi ? Surement parce que chaque type booléen est "pur". Donc un chiffre n'est ni vrai ni faux, il est un chiffre. En ruby, tout est classe, tout renvoie une valeur, et si cette valeur est nulle, elle s'appelle nil :
>> def nouvelle_fonction >> end => nil >> nouvelle_fonction => nil >> def nouvelle_fonction >> 1 + 1 >> end => nil >> nouvelle_fonction => 2
Vous noterez qu'il y a une différence *significative* entre ce qu'est quelque chose, et ce que cette chose signifie dans une condition, donc en ruby toujours, nous avons ceci :
>> 0 == true => false >> 0 ? 'vrai' : 'faux' => "vrai"
Vous noterez aussi qu'en php, cela donne :
>> 0 ? 'vrai' : 'faux' => 'faux'
Alors pourquoi 0 n'est pas true alors qu'il valide une condition ? Certainement parce que :
>> 0.class => Fixnum
Donc 0 est une classe de type Fixnum, donc elle existe bien, et l'interpréteur se dit " s'il fallait faire un choix entre true et false, une classe valide serait vraie ", ce qui est vérifié par les tests suivants :
>> nil == true => false >> nil == false => false >> nil ? 'oui' : 'non' => "non"
C'est bête, mais ça fait drôle de mettre le doigt sur quelque chose qui échappe un peu des fois...
Et, pour finir et vous laissez aller à la récré, je vais vous reparler de ça et de la conversion des chiffres par PHP (oui c'est faiblement typé, tout le monde le sait, ...) :
>> 0 < 1 => true >> '0' < 1 => true
Tandis qu'en ruby, nous avons :
>> 0 < 1
=> true
>> '0' < 1
ArgumentError: comparison of String with 1 failed
from (irb):33:in `<'
from (irb):33
from :0
Voili voilà, vous pouvez aller jouer.
:: 6 commentaires ::


