Dur Comme Faire

Aller au contenu | Aller au menu | Aller à la recherche

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.

mercredi 23 février 2005 à 08h22 - PHP Fil de syndication

Rétroliens

Aucun rétrolien pour le moment.

Les rétroliens pour ce billet sont fermés.

Commentaires

Gravatar de Fabien

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)

Fabien le mercredi 23 février 2005 à 13h54 Icone du permalien

Gravatar de JMF

La m?me syntaxe est disponible sous Delphi. :)

JMF le mercredi 23 février 2005 à 13h57 Icone du permalien

Gravatar de michel v

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

michel v le mercredi 23 février 2005 à 14h55 Icone du permalien

Gravatar de SToto98

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.

SToto98 le mercredi 23 février 2005 à 19h24 Icone du permalien

Gravatar de JMF

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).

JMF le mercredi 23 février 2005 à 20h38 Icone du permalien

Gravatar de Greg

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 !

Greg le jeudi 24 février 2005 à 10h37 Icone du permalien

Gravatar de Ldo

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

je pense que c'est celui la que tu cherchait JM non ? :D

Ldo le vendredi 25 février 2005 à 11h32 Icone du permalien

Gravatar de JMF

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.

JMF le vendredi 25 février 2005 à 21h27 Icone du permalien

Gravatar de JMF

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

JMF le mardi 8 mars 2005 à 17h17 Icone du permalien

Ajouter un commentaire

Les commentaires pour ce billet sont fermés.

XHTML - CSS - DotClear - Technorati

Les billets de ce blog sont sous licence Creative Commons