Raccourcir un if

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Raccourcir un if

par kooma » 10 juil. 2006, 00:44

Merci pour l'idée des tableaux je n'y avais pas pensé.
Pour ce qui est du sizeof, je suis d'accord mais c'est pour l'instant une écriture temporaire, on est deux sur le code et nous le repasserons pour le rendre plus rigoureux une fois que nous aurons vu si notre projet peut, ou pas, fonctionner :D .
Et pour les parentheses trop nombreuses du if, je suis on ne peut plus d'accord et je vais corriger ça des maintenant !

par Ryle » 08 juil. 2006, 16:07

Personnellement je te recommenderais même de les compliquer d'avantage... en effet, considérer la taille d'une chaine comme un booléen n'est pas ce qu'il y a de plus propre à mon avis. Cela fonctionne en php qui interprête le 0 comme un false et tout le reste comme true, mais ce n'est pas très rigoureux.
Tu peux par contre alléger un peu au niveau parenthèses, chaque condition n'a pas besoin d'en être entouré, elles ne servent qu'à regrouper les OU.

Je le redigerais personnellement comme ceci (en jouant sur l'indantation pour faciliter la lecture)
if ( sizeof($this->Reference) 
     && ( sizeof($this->Proprietes)!=0 || sizeof($this->Etrangeres)=!0 )
) 
Pour le second, comme Truc, je te recommande le tableau, mais s'il y en a plus de 2 ou 3. Si tu n'as que deux tests à faire autant les écrire directement, cela reste plus rapide à comprendre que de devoir rechercher le tableau auquel on se refère..

par Truc » 07 juil. 2006, 22:44

Pour le 1er test il n'y a pas vraiment de raccourci possible hormis l'affectation des résultats de sizeof avant test:
s1=sizeof($this->Proprietes);
s2=sizeof($this->Proprietes);
s3=sizeof($this->Proprietes);

if ( ( s1 || s2 ) && s3 )
le 2ème test peut se faire avec un tableau:
$t=array("0,1","1,1");
$a = $Assoc['Card'];
if(in_array($a,$t))

par goeb » 07 juil. 2006, 12:39

salut,

voici un exemple pour éclaircir le code :
if ( ( sizeof($this->Proprietes) || sizeof($this->Etrangeres) ) &&
     sizeof($this->Reference) ){ 
$a = $Assoc['Card'];
if ( $a=="0,1" || $a=="1,1" ) // 0,1 ou 1,1

Raccourcir un if

par kooma » 06 juil. 2006, 13:16

Bonjour à tous,
je suis en train d'écrire un script php, et voici que je me retrouve avec des if volumineux de ce type:

if (((sizeof($this->Proprietes))||(sizeof($this->Etrangeres)))&&(sizeof($this->Reference))){

ou bien

if (($Assoc['Card']=="0,1"||$Assoc['Card']=="1,1"))

J'aimerais bien trouver un moyen de les écrire plus simplement du genre:
if ($Assoc['Card']=="0,1"OU"1,1")

Merci.