JeuWeb - Crée ton jeu par navigateur
Comparaisons larges ou stictes ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Comparaisons larges ou stictes ? (/showthread.php?tid=3473)

Pages : 1 2 3 4


RE: Comparaisons larges ou stictes ? - Anthor - 29-12-2008

o_O

C'est plus rapide d'utiliser la comparaison strictes, ça évite de nombreux bugs auquel vous ne pensez pas durant vos tests.
Et ça fait la grande différence entre un bon développeur et un développeur du dimanche...

Y'en a qui sont les premiers a critiquer php pour sa souplesse, mais ce sont aussi les premiers à s'engouffrer dedans !


RE: Comparaisons larges ou stictes ? - janeo - 29-12-2008

Melimelo

Citation :===>O_o je sais pas d'ou tu sors ca mais c'est pas vrai du tout ....
Ça renvoie toujours true, sauf si la chaîne ne contient qu'un nombre différent de 0. Mais si elle contient d'autres symboles, ça renvoie toujours true.
Et je ne comprend toujours pas la différence entre
( (int) $chaineDeCaractere === 0 ) et ($chaineDeCaractere == 0) .

Anthor

Citation :Y'en a qui sont les premiers a critiquer php pour sa souplesse
Cite moi un membre de ce sujet qui a critiqué PHP pour sa souplesse. Je n'en vois pas.


RE: Comparaisons larges ou stictes ? - janeo - 29-12-2008

Citation :Non, si tu utilises un == et que tu oublies un =, tu ne verras pas l'erreur forcément immédiatement.

Si ça va générer un bug donc tu remarqueras tout de suite l'erreur en testant.

Citation :Ensuite, si vous n'aimez pas ===, vous pensez donc que "implicit is better than explicit" ?

En ce qui me concerne, je pense que vouloir tout expliciter est stupide car c'est lourd. Mais être trop implicite est mauvais aussi. Il y a donc un juste milieu à trouver.


RE: Comparaisons larges ou stictes ? - wild-D - 29-12-2008

>> Si ça va générer un bug donc tu remarqueras tout de suite l'erreur en testant.

tout dépend de ta convention d'écriture:
si on utilise l'écriture "à la barst" 1 == $x; alors -> if(1 = $x){} génère bien une erreur.
mais $x == 1; -> if($x = 1){} ne générerait jamais la moindre erreur mais t'aura un joli bug sous le tapis. (et sauf unittesting, pas sûr qu'il appariasse immédiatement)

>> Ensuite, si vous n'aimez pas ===, vous pensez donc que "implicit is better than explicit" ?
"implicit is better than explicit" vs "explicit is better than implicit" ?!?!
pour moi y a pas de règle absolue, ça dépend seulement de ce que je souhaite faire :p


RE: Comparaisons larges ou stictes ? - P0ulp0r - 29-12-2008

Perso, je l'utilise que lorsqu'il peut y avoir une erreur de compréhension de la comparaison.

Pour ce code, je l'utilise
Code PHP :
<?php 
// on met toutes les valeurs et champs dans l'update
foreach ($array as $key => $value) {
$modif .= "`" . $key . "` = '" . $value . "'";
// on regarde s'il y a un autre élément et on ajoute une virgule si oui
if (next($array) !== false) {
$modif .= ", ";
prev($array);
}
}
// on update
mysql_query("UPDATE `" . $this->table . "` SET " . $modif . " WHERE `" .
$this->tablePrimaryKey . "` = '" . $id . "' ");

Après c'est au programmeur de voir s'il y a un intérêt de le mettre ou pas. Car cela peut générer des erreurs, ici pour mon bout de code c'est le cas, donc obligation de mettre le triple égale.


RE: Comparaisons larges ou stictes ? - Anthor - 29-12-2008

@poulpor =>Tu l'aurais pas oublié ton === :p

@janeo =>
Citation :Ça renvoie toujours true, sauf si la chaîne ne contient qu'un nombre différent de 0. Mais si elle contient d'autres symboles, ça renvoie toujours true.
Code PHP :
<?php 
echo (int) '59-test';
Ne donne pas zéro...


RE: Comparaisons larges ou stictes ? - Argorate - 29-12-2008

Anthor : A mon sens, le programmeur qui oublie des "=", c'est lui que je qualifierais de codeur du dimanche, ce genre d'erreur n'arrive plus quand on sait bien coder (il faut aussi être doué et surtout concentré sur se qu'on fait)...

Je pense qu’on s’écarte du sujet, le problème n’est pas de savoir si on s’aperçoit qui manque un égal puisque c’est une erreur qui n’est pas censé être faite…

Apres pour le problème posé, j’ai déjà dit que je trouvé dangereux de s’embrouiller avec dix égal qui se suive, et que de voir un bout de code avec « === » ça ne m’est pas du tout parlant, mais je ne peux parlé que pour moi...


RE: Comparaisons larges ou stictes ? - janeo - 29-12-2008

Anthor => oui tu as raison. ((int) 'test-59' === 0) vaut true par contre. Bizarre.
Par ailleurs P0ulp0r utilise !==, qui est une comparaison stricte, donc son code est un bon exemple il me semble.

Personnellement j'utilise === quand je veux faire une comparaison stricte et == quand je veux faire une comparaison large. Par exemple je ne vois pas trop l'intérêt de faire ((int) $var === 0) alors que ($var == 0) revient au même (il me semble).


RE: Comparaisons larges ou stictes ? - jo_link_noir - 30-12-2008

Conversion de chaînes en nombres (php.net)

Personnellement le préfère ===
Il m'arrive souvent de faire des fonctions qui retourne un nombre ou false si un problème survient. Et donc, si ma fonction retourne 0, le premier if retourne une erreur et pas le second
Code PHP :
<?php 
//myFonction retourne 0 pour l'exemple
if(myFonction() == false) //passage dans le if
echo 'erreur';

if(
myFonction() === false) //on n'y passe pas
echo 'erreur';



RE: Comparaisons larges ou stictes ? - janeo - 30-12-2008

Bon exemple.