Tests plus concis

Voici une astuce toute simple pour diminuer la taille de vos tests quand ceux-ci sont simples et répétitifs.

Admettons que vous souhaitiez vérifier que la valeur d’une variable vaux soit 2, soit 3, soit 7, soit 9. La méthode qui vient immédiatement à l’esprit est de multiplier les tests de cette manière :

if ($variable == 2 ||     $variable == 3 ||     $variable == 7 ||     $variable == 9 ) {   // ... code ... }

Cela fait beaucoup de lignes pour un test assez simple finalement. En y regardant de plus près, on s’apercoit qu’on peut reformuler le problème ainsi : la valeur d’une variable est-elle dans l’ensemble 2, 3, 7, 9 ?. Ce qui s’écrit ainsi en PHP :

if (in_array($variable, array(2, 3, 7, 9))) {   // ... code ... }

Le code est maintenant beaucoup plus concis et tout aussi simple à comprendre.

Mise à jour :

Suite au commentaire de michel v, j’ai effectué un petit benchmark et il s’avère effectivement que la solution avec in_array est nettement plus lente que l’autre. De plus, la différence grandie lorsque la valeur à trouver est située au début de la liste des tests.

Néanmoins, il faut relativiser car si la différence de temps d’exécution entre les 2 solutions est importante, dans l’absolu, la durée en elle même est infime et donc négligeable dans 99,99% des cas.

Ce contenu a été publié dans PHP. Vous pouvez le mettre en favoris avec ce permalien.

9 réponses à Tests plus concis

  1. Fabien dit :

    C’est m?me encore plus concis en Python :

    if variable in [2, 3, 7, 9]:
    # … code …

    (Rah, pas moyen de mettre de tabulation ou des espaces multiples dans un commentaire)

  2. JMF dit :

    La m?me syntaxe est disponible sous Delphi. 🙂

  3. michel v dit :

    Plus concis, et plus lent aussi. in_array() est tr?s lent…

  4. SToto98 dit :

    Certe c’est plus lent (?a semble normal) mais c’est autrement plus pratique (comme bcp de fonctions php dans ce style). A ce propos, l’un de vous connaitrai un site de benchmark comparatif de vitesse de fonctions php ?
    Accessoirement, il faudrai faire ce test avec un code optimis? avec MMCache ou un autre pr?-compilateur de ce genre pour voir si la diff?rence de vitesse viens bien de la fonction elle m?me ou du parsing de la condition.

  5. JMF dit :

    SToto98>A ce propos, l’un de vous connaitrai un site de benchmark comparatif de vitesse de fonctions php ?

    Je sais qu’il en existe un que j’ai d?j? consult? mais je n’arrive pas ? retrouver l’URL.

    SToto98>Accessoirement, il faudrai faire ce test avec un code optimis? avec MMCache ou un autre pr?-compilateur de ce genre

    Tu fais une remarque judicieuse car sans faire attention j’ai test? avec eAccelerator (le fork de Turck MMCache).

  6. Greg dit :

    Et hop, un p’tit benchmark trouv? sur le forum de developpez.net
    iubito.developpez.com/php…

    Ayant d?j? utilis? in_array() sur de gros tableaux (et j’avais pas le choix), je te confirme que c’est tr?s lent. Pour des tableaux avec peu d’indices, ?a va encore … mais pour le reste, laisse tomber !

  7. Ldo dit :

    il y a aussi ?a :
    http://www.estvideo.com/dew/page...

    je pense que c’est celui la que tu cherchait JM non ? 😀

  8. JMF dit :

    Ldo> En fait, je ne connaissais pas ce comparatif mais il a l’air sympa. 🙂

    Celui dont je parle a environ 1 an, est en Anglais et est beaucoup plus spartiate dans sa pr?sentation.

  9. JMF dit :

    Ldo, j’ai fini par retrouver le fameux test dont je parlais : http://www.php.lt/benchmark/phpbench.php

Les commentaires sont fermés.