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 ? - Wells - 26-12-2008

Déjà à la base, cette question ne se pose que pour une langage typé.

Hors comme 99% des développement PHP ne le sont pas ^^

CQFD


RE: Comparaisons larges ou stictes ? - barst - 26-12-2008

Pour ma part, j'utilise régulièrement les comparaisons strictes systématiquement quand je dois tester des booléens sur des retours de fonctions.

Dans les autres cas, je sis plus pernicieux.


Par habitude et expérience, je mets les constantes à gauche dans une comparaison :
Code PHP :
<?php 
0
=== $retour
au lieu de
Code PHP :
<?php 
$retour
=== 0

Ca évite les erreurs de frappe du style :
Code PHP :
<?php 
$retour
= 0
qui peuvent être longues à débugger.


RE: Comparaisons larges ou stictes ? - Sephi-Chan - 26-12-2008

(26-12-2008, 10:33 AM)Wells a écrit : Déjà à la base, cette question ne se pose que pour une langage typé.

Hors comme 99% des développement PHP ne le sont pas ^^

CQFD
CQFD rien du tout. :p
Ce n'est pas parce que PHP n'est pas fortement typé que les types n'existent pas.
C'est plus une question de rigueur que de nécessité/utilité.
En rencontrant une égalité large (==), PHP va utiliser les types de données de chaque côté de l'opérateur pour les transtyper selon ses besoins. Autant faire cette manipulation explicitement, comme le conseille cette phrase célèbre du développement. Non ?

Pas mal l'astuce, Barst. Cela dit, en mettant 3 signes égal, tu te rends compte rapidement quand il en manque deux. ^^ Je ferrais comme ça aussi, à l'avenir, c'est une possibilité de bug en moins.


Sephi-Chan


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

+1 plagieur de barst
simple et efficace comme astuce. Smile


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

Pour se qui est de "l'astuce", je pense serieusement qu'il faut vraiment pas etre doué pour oublié 2 "=", ou ne pas rapidement le voir, dans ce cas autant arreté la prog, c'est pas fait pour vous^^

PS: Cela me rajoute un argument pour moi d'aillieur, si on commence a partir avec des triple =, la confusion devient possible comme le disait brast, donc je trouve plus clair de rester a 1 ou 2 égal, pas besoin d'en rajouter Smile

Et personnelement je n'ai toujours pas comprit le probleme que cela pose d'utiliser "==", que ça utilise les deux types des deux oppérandes c'est super, et alors?


RE: Comparaisons larges ou stictes ? - Sephi-Chan - 26-12-2008

(26-12-2008, 08:33 PM)Argorate a écrit : PS: Cela me rajoute un argument pour moi d'aillieur, si on commence a partir avec des triple =, la confusion devient possible comme le disait brast, donc je trouve plus clair de rester a 1 ou 2 égal, pas besoin d'en rajouter Smile
Non pas du tout. C'est l'inverse. Si tu oublies un égal alors que tu n'en utilises que 2, ça va générer un bug. Alors que si tu mets deux égal au lieu de trois, ça fonctionnera très bien quand même.

(26-12-2008, 08:33 PM)Argorate a écrit : Et personnelement je n'ai toujours pas comprit le probleme que cela pose d'utiliser "==", que ça utilise les deux types des deux oppérandes c'est super, et alors?
Aucune technique ne pose problème. C'est juste qu'il est plus rigoureux de travailler avec des égalités strictes, puisqu'il faut faire attention au typage des opérandes.

Avec les comparaisons strictes, tu dois faire explicitement ce que fais la comparaison large implicitement. Et j'ai toujours lu que l'explicite était mieux que l'implicite. Je fais le choix de la rigueur, mais chacun fait ce qu'il souhaite.


Sephi-Chan


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

Oui mais si le but est de faire comme si php ne géré pas lui même assez bien les types pourquoi utiliser php!
Après tout php offre la possibilité de ne pas avoir à se soucier des types, autrement dit, on utilise des ressources pour çà. A quoi çà sert de ne pas utiliser cette fonctionnalité!

Surtout que je suis pas certains que ce sera plus rapide avec des comparaisons stricts!


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

Je suis d'accord...


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

Je n'ai pas compris l'intérêt des === avec (int) dans l'exemple de Sephi-Chan.

Il me semble que ( (int) $chaineDeCaractere === 0 ) renvoit toujours true en PHP. De plus ça équivaut à ($chaineDeCaractere == 0) non ?

(26-12-2008, 09:51 PM)Sephi-Chan a écrit :
(26-12-2008, 08:33 PM)Argorate a écrit : PS: Cela me rajoute un argument pour moi d'aillieur, si on commence a partir avec des triple =, la confusion devient possible comme le disait brast, donc je trouve plus clair de rester a 1 ou 2 égal, pas besoin d'en rajouter Smile

Non pas du tout. C'est l'inverse. Si tu oublies un égal alors que tu n'en utilises que 2, ça va générer un bug. Alors que si tu mets deux égal au lieu de trois, ça fonctionnera très bien quand même.

Je suis plutôt d'accord avec Argorate sur ce point.

Si tu utilises == et que tu oublies un =, ça va générer un bug et tu corrigeras l'erreur immédiatement.
Si tu veux utiliser === et que tu oublies un =, le script fonctionnera, mais il ne fera pas exactement ce que tu souhaites et tu ne t'en rendras pas compte.

Par ailleurs bien joué barst pour l'astuce de la constante à gauche. Mais je pense qu'elle est surtout utile quand on utilise == plutôt que ===, car il est plus fréquent d'oublier un signe égal que deux.


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

( (int) $chaineDeCaractere === 0 ) renvoit toujours true en PHP.


===>O_o je sais pas d'ou tu sors ca mais c'est pas vrai du tout ....