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


Comparaisons larges ou stictes ? - Sephi-Chan - 23-12-2008

Je lance ce petit débat sur les comparaisons. Utilisez-vous les comparaisons larges (==) ou strictes (===) ? Pourquoi ce choix ?

Pour ma part, j'utilise (et conseille) de tester les retours explicitement.
De plus, je favorise l'égalité stricte (===) plutôt que l'égalité large (==).

Ce n'est pas nouveau : Explicit is better than implicit. Le code en ressort plus clair.

Voyez cet exemple de condition complexe qui serait bien moins lisibles avec des points d'exclamation. Smile

Notez que les transtypages effectués ne sont là que parce je travaille ici avec des données issues d'une base de données (qui ne renvoie que des chaînes de caractères ou NULL).

if(
(int) $discussion['hidden'] === 0
&& (int) $discussion['locked'] === 0
&& (int) $character['city_id'] === (int) $discussion['city_id']
&& (
(int) $discussion['private'] === 0
||
(int) $discussion['private'] === 1
&& in_array(
(int) $character['id'],
$discussion['participants']
) === true
)
){
return true;
}

Voilà, voilà pour ce rapide point sur les conditions.


Sephi-Chan


Edit Sephi-Chan : je scinde la discussion.


RE: Créer des villages éloignés les uns des autres sur une carte - wild-D - 23-12-2008

(23-12-2008, 09:45 PM)Sephi-Chan a écrit :
if(
(int) $discussion['hidden'] === 0
&& (int) $discussion['locked'] === 0
&& (int) $character['city_id'] === (int) $discussion['city_id']
&& (
(int) $discussion['private'] === 0
||
(int) $discussion['private'] === 1
&& in_array(
(int) $character['id'],
$discussion['participants']
) === true
)
){
return true;
}

je comprends pas à quoi sert la comparaison strict... dans le sens ou tu force le cast sur la var de l'autre coté. Au final une comparaison simple aurai le même résultat non ?

sinon les cast systématique c'est pour "émuler" en PHP un langage typé ?


RE: Créer des villages éloignés les uns des autres sur une carte - Sephi-Chan - 23-12-2008

Non, c'est parce que MySQL ne renvoie que deux choses : des chaînes ou des NULL. Le transtypage me permet simplement de mettre tout ça à plat. Smile

Là, l'exemple soulignait juste l'intérêt d'utiliser === false plutôt que !.


Sephi-Chan


RE: Créer des villages éloignés les uns des autres sur une carte - Anthor - 24-12-2008

Oui puis empty ne veut pas dire NULL... 0 n'est pas égale a NULL... Une valeur vide n'est pas égale à NULL...

Donc pas de empty pour une valeur null...


RE: Créer des villages éloignés les uns des autres sur une carte - Sephi-Chan - 24-12-2008

Le problème de empty(), c'est que c'est de la poudre aux yeux. C'est une solution de facilité. C'est sympa car ça demande moins de rigueur, mais finalement ça revient à faire un isset() suivi d'une comparaison stricte (ou d'une comparaison avec transtypage).

Documentation a écrit :Ce qui suit est considéré comme étant vide :

* "" (une chaîne vide)
* 0 (0 en tant qu'entier)
* "0" (0 en tant que chaîne de caractères)
* NULL
* FALSE
* array() (un tableau vide)
* var $var; (une variable déclarée, mais sans valeur dans une classe)


Sephi-Chan


RE: Créer des villages éloignés les uns des autres sur une carte - Anthor - 24-12-2008

Empty, c'est le htmlentities de la variable vide ! HAHAHAHAHA


RE: Créer des villages éloignés les uns des autres sur une carte - Argorate - 24-12-2008

Pas besoin de isset() dans la plus part des cas...
Ici, il cherche pas vraiment a comparé a null, mais savoir si ça variable contient qq chose ou non(enfin c'est comme ça que je l'ai comprit), donc empty() est tres bien dans ce cas.

PS: j'aime pas trop les "===" c'est a l'oppsé de se que tu dis: je trouve que ça rend le code totalement amphigourique!
On ne sait plus clairement se que le if compare, je prefere de simples "==" clair et net, qui font la meme chose...
Mais apres chacun fait comme il veux Wink


RE: Créer des villages éloignés les uns des autres sur une carte - Sephi-Chan - 24-12-2008

Je seulement de isset() pour expliquer que empty() n'étais finalement qu'un cumul de isset() et de comparaison.

C'est une question de choix, mais surtout de rigueur.
J'écris plus mais je contrôle mieux mon code.

Je trouve dangereux d'utiliser un opérateur de comparaison si permissif, comme en témoigne la page de documentation Comparaison de types en PHP.


Sephi-Chan


RE: Comparaisons larges ou stictes ? - Zamentur - 24-12-2008

Perso, je préfère les "!" . D'ailleurs, si j'ai le choix, je préfère de manière général tester une inégalité à une égalité, car çà prend théoriquement moins de temps!


RE: Comparaisons larges ou stictes ? - Thedeejay - 25-12-2008

sympa ton site sephi :p