IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Si je fais un if() avec plusieurs conditions ..


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Si je fais un if() avec plusieurs conditions ..
    Bonjour a tous,

    Si je fais un if() avec plusieurs conditions, comment est ce que je peux savoir laquelle a ete vrai ou pas, et si c possible que cette valeur soit dans un parametre. Par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (a==1 or b==2 or c==3) {...}
    comment savoir laquelle des valeurs a ete exacte dans ce if().

    Merci.

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Salut,

    Tu ne peux pas quand tu regroupes des conditions, isoler celle qui a fait valider ou invalider la condition globale.

    La seule solution que je vois, c'est de faire une série de if.

    A+
    K

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Bonjour,

    Citation Envoyé par Pauli
    Si je fais un if() avec plusieurs conditions, comment est ce que je peux savoir laquelle a ete vrai ou pas, et si c possible que cette valeur soit dans un parametre. Par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (a==1 or b==2 or c==3) {...}
    comment savoir laquelle des valeurs a ete exacte dans ce if().
    En fait, c'est possible, mais ce n'est pas forcément lisible, ni très efficace.

    En effet, l'evaluation de l'affectation d'un test dans une variable produit aussi le résultat de ce test :
    • Mettra 1 dans $a et passera dans le bloc du if si $b vaut 5
    • Mettra 0 dans $a et passera dans le bloc else si $b diffère de 5.


    Permier point : l'efficacité. Il faut savoir que Perl, tout comme C ou certains langages avides de performances, fait des optimisations des tests en fonction des conjonctions qui sont utilisées. Ainsi, lorsque la conjonction est un "or", le test arrête son évaluation au premier test vrai rencontré. Lorsque la conjonction est un "and", le test s'arrête au premier test faux.

    La conséquence, c'est que le test (($a==1) or ($b==2) or ($c==3)) s'arrêtera immédiatement si $a vaut 1, et le contenu de $b et $c ne sera même pas testé.


    Pour ce qui est de la lisibilité, voici une façon de le faire, mais ce n'est pas beau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $a=0; 
    $b=1; 
     
    if (($test[0] = ($a == 1)) or ($test[1] = ($b == 1))) { 
      foreach $i (0..$#test) { 
        print "test $i -> ".int($test[$i])."\n"; 
      }
    }
    Ce n'est pas lisible car il faut un tableau pour affecter tous les résultat des tests individuels, ou bien une papardée de variables ... Cela alourdit aussi le test et masque un peu sa logique.

    A la limite, on peut retrouver de la lisibilité et de l'efficacité ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $a=0; 
    $b=1; 
     
    $test[0] = ($a == 1);
    $test[1] = ($b == 1);
     
    if ($test[0] or $test[1]) { 
      foreach $i (0..$#test) { 
        print "test $i -> ".int($test[$i])."\n"; 
      }
    }
    Après, les plus "perlistes" utiliseront des push pour empiler les résultats de test dans le tableau, et un grep pour savoir lesquels sont vrais et lesquels sont faux.

    Tout est possible, en Perl, ou presque. ;-)
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. [SQL] Requête sur un champ mais avec plusieurs conditions
    Par lowkey dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/02/2008, 12h26
  2. Somme si avec plusieurs conditions et plage de données variables.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2007, 14h19
  3. Réponses: 1
    Dernier message: 27/06/2007, 16h01
  4. Having avec plusieurs conditions ?
    Par jchatard dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/04/2007, 15h58
  5. like avec plusieur condition
    Par wayak3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2007, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo