5 conseils pour écrire du code PHP maigre
dimanche 19 juillet 2009 à 20:12 :: PHP :: #70 :: rss
Je vous propose une petite traduction très libre d'un article intéressant sur Code Income. Ces bonnes pratiques je les ai adoptés depuis longtemps, mais ce n'est pas en cours que je les ai apprises... c'est pourtant vital de coder rapidement et efficacement! Alors lisez rapidement ce qui suit, et si vous apprenez quelque chose, j'en suis ravi 
Vous remarquerez que j'ai traduit "shorter" par "maigre", avis aux linguistes de proposer mieux, mais j'avoue que j'aime bien cette idée d'un code maigre en caractères et en lignes.
Écrire du code maigre et concis est vital quand vous commencez à travailler avec d'autres développeurs ou prenez plusieurs mois sur un projet. La clarté d'une ligne de code est largement supérieur à trois lignes de code qui font exactement la même chose. Voici cinq conseils pour l'écriture de code plus concis en utilisant diverses méthodes de raccourcis et techniques de programmation.
1) Mieux utiliser les opérations booléennes
Code Long
if($condition_quelconque == true)
{
if($condition_secondaire == true)
{
print "Toutes les conditions sont remplies!";
}
else if($condition_alternative == true)
{
print "Toutes les conditions sont remplies!";
}
}
Code Maigre
if($condition_quelconque && ($condition_secondaire || $condition_alternative))
{
print "Toutes les conditions sont remplies!";
}
En faisant une meilleur utilisation des opérations Booléennes, vous pouvez combiner plusieurs instructions if dans une seule.
2) Utiliser l'opérateur Ternaire
Code Long
if($age >= 18) $peut_conduire = true; else $peut_conduire = false;
Code Maigre
opérateur ternaire (les parenthèses ne sont pas toujours nécessaires, ici elles facilitent la compréhension)
$peut_conduire = ($age >= 18) ? true : false;
ou encore plus maigre, possible seulement si le résultat attendu est booléen
$peut_conduire = $age >= 18;
Les trois exemples donnent exactement le même résultat, l'utilisateur ne peut conduire que s'il a plus de 18 ans.
Je vous ajoute en bonus un autre exemple de code ternaire pour bien comprendre sont fonctionnement :
$action = (defined($_POST['action']) && !empty($_POST['action'])) ? $_POST['action'] : 'valeur par défaut';
Ce code est d'ailleurs bien pratique pour tester les réponses d'un formulaire et lui attribuer une valeur par défaut en une seule ligne de code maigre, simple et lisible.
3) Remplacer les boucles while par les boucles for
Code Long
$i = 0;
while($i < 100)
{
print "Écris-moi 100 fois!";
$i++;
}
Code Maigre
for($i = 0; $i < 100; $i++)
{
print "Écris-moi 100 fois!";
}
4) Écrire de façon récursive
Il y a beaucoup de personnes qui se plaignent sur l'utilisation de la récursivité, et son infériorité (en terme de performance) à l'écriture de façon itérative. Toutefois, nul ne peut nier qu'elle permet d'écrire du code plus concis (la plupart du temps).
Code Long
function iterFib($n)
{
$f1 = 1;
$f2 = 0;
$total = 0;
if( $n == 0 || $n == 1)
return $n;
for($i = 2; $i <= $n; $i++)
{
$fib = $f1 + $f2;
$f2 = $f1;
$f1 = $fib;
}
return $fib;
}
Code Maigre
function fibonacci($n)
{
if ($n <= 2) return 1;
else return fibonacci($n-1) + fibonacci($n-2);
}
L'auteur dit avoir fait quelques test sur le code ci-dessus, et la différence de temps qu'il a fallu pour exécuter le code itératif contre le code récursif varie de quelques microsecondes. Je ne sais pas dans quelles mesures et conditions il a fait les tests, mais comme il a dit lui même la différence semble insignifiante.
Pour ma part j'ai fait des tests, et je n'arrive pas aux même conclusions que lui. Dans le cas de la suite de Fibonacci, la méthode récursive est extra lente dès qu'il s'agit de calculer un trop grand chiffre de la suite, il lui faut déjà plus d'une seconde pour calculer le 30ème. Alors que la méthode itérative met 0.2 secondes pour calculer les 1000 premiers chiffres de la suite... hallucinant le rapport....
Si on ne se concentre que sur les calculs des chiffres 3, 4 et 5 de la suite (résultats 2, 3 et 5), donc on limite le nombre d'appels récursifs, et qu'on fait les calculs 10000 fois dans une boucle for, alors le temps est équivalent... mais c'est ridicule car le nombre d'appel récursifs est limité... pour moi l'exemple n'est pas concluant...
5) Combinaison d'opérateurs arithmétiques et d'assignation
L'un des raccourcis les plus utilisé en développement, les opérateurs combinés.
Code Long
$variable = $variable + 1000;
Code Maigre
$variable += 1000;
Il y a de nombreux opérateurs combinés, vous trouverez ci-dessous les plus importants
+= // Ajoute et assigne à une variabe -= // Soustrait... /= // Divise... *= // Multiplie.... %= // Modulo... .= // Concatène... // Pas des opérateurs combinés, mais néanmoins très utiles ++ // incrémente 1 à une variable -- // décrémente 1 à une variable
Commentaires
1. Le lundi 20 juillet 2009 à 15:48, par pyb
2. Le lundi 20 juillet 2009 à 21:50, par Natsimhan
Ajouter un commentaire