mageekblog - Mot-clé - florilègeLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearFlorilège #1urn:md5:36e20120a1235f787aeb19cab4b380a32011-05-11T09:00:00+02:002011-05-30T12:45:50+02:00mageekguyPHPflorilègePHPRTFM<p>Je lis beaucoup de code.</p>
<p>Et si je lis pas mal de code en <a href="http://fr.wikipedia.org/wiki/C_%28langage%29">C</a>, en <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a>, en <a href="http://fr.wikipedia.org/wiki/Perl_%28langage%29">Perl</a>, en <a href="http://fr.wikipedia.org/wiki/Ruby">Ruby</a>, en <a href="http://fr.wikipedia.org/wiki/Python_%28langage%29">Python</a> et d'autres langage plus ou moins exotique, la plus grande majorité du code que je lis est écrit en <a href="http://www.php.net">PHP</a>.</p>
<p>Ce code peut avoir diverses origines.</p>
<p>Il peut provenir du dernier framework à la mode, d'une classe qui m'intéresse, d'un projet que l'on m'a demandé d'ausculter, ou bien avoir été écrit par un contributeur à l'un de mes projets ou bien encore par l'un de mes collègues.</p>
<p>Et évidement, parmi tout ce code, il y a parfois des pépites.</p> <p>Au risque de décevoir, il ne s'agit de pépites de grande valeur, bien au contraire, puisque j'utilise ce mot de manière plus qu'ironique.</p>
<p>En effet, indépendamment du niveau et de l'expérience du développeur à l'origine du code, il m'arrive de tomber sur du code peu efficace, voir complètement stupide.</p>
<p>C'est donc une compilation de quelques-unes de ces mauvaises pratiques que je me propose de partager.</p>
<p>Je vais donc commencer par une technique permettant de localiser la clef de la dernière valeur valant <code>TRUE</code> dans un tableau :</p>
<blockquote><pre><code><?php<br />...<br />$lastTrue = null;<br /><br />foreach ($values as $key => $value)<br />{<br /> if ($value == true)<br /> {<br /> $lastTrue = $key;<br /> }<br />}<br />...<br />?></code></pre></blockquote>
<p>Il est vrai que c'est beaucoup plus efficace et lisible que cela :</p>
<blockquote><pre><code><?php<br />...<br />$lastTrue = array_search(true, array_reverse($values, true));<br />...<br />?></code></pre></blockquote>
<p>La gestion du temps est parfois également un problème, d'ailleurs, l'une de mes expressions favorites est que le temps, c'est chiant (et c'est un ancien développeur <a href="http://noparking.net/opentime">d'opentime</a> qui le dit).</p>
<p>Le but est cette fois de calculer le numéro du jour de la semaine, 1 devant correspondre au lundi, et 7 au dimanche.</p>
<blockquote><pre><code><?php<br />...<br />$day = date('w', $timestamp);<br /><br />if ($day == 0)<br />{<br /> $day = 7;<br />}<br />...<br />?></code></pre></blockquote>
<p>C'est à se demander la raison pour laquelle les développeurs de PHP ont cru bon d'ajouter l'argument <code>N</code> à la fonction <code><a href="http://fr.php.net/manual/fr/function.date.php">date()</a></code> avec PHP 5.1 (et pour information, le code incriminé devait être exécuté sur PHP 5.3 minimum).</p>
<blockquote><pre><code><?php<br />...<br />$day = date('N', $timestamp);<br />...<br />?></code></pre></blockquote>
<p>Il arrive également parfois que le développeur éprouve le besoin d'initialiser un tableau avec un suite d'entier.</p>
<p>J'ai vu pas mal d'énormité pour réaliser cette simple tâche, mais la plus répandue est celle qui suit.</p>
<blockquote><pre><code><?php<br />...<br />$array = array(1, 2, 3, 4, 5, 6, 7 , 8, 9, 10 /* en on peut aller très loin comme cela */);<br />...<br />?></code></pre></blockquote>
<p>Apparemment, il y a des gens qui aiment avoir le bout des doigts carrés.</p>
<p>Personnellement, dans ce cas, j'applique à la lettre l'une des maximes favorites de mon professeur de <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a> : un bon développeur est un développeur fainéant.</p>
<blockquote><pre><code><?php<br />...<br />$array = range(1, 10);<br />...<br />?></code></pre></blockquote>
<p>Je vais m'arrêter là pour ce billet, car sinon, j'en connais certain qui vont crier au lynchage en place publique, et d'autres qui me diront que si je veux lire du code de qualité, je n'ai qu'à lire autre chose que du code en <a href="http://www.php.net">PHP</a>, ce qui, dans un cas comme dans l'autre, ne sera pas très constructif.</p>
<p>Et puis, il faut que j'en garde sous le coude pour le prochain florilège, même si la matière n'est pas très difficile à trouver, malheureusement.</p>
<p>Pourtant, quoiqu'on dise et quoiqu'on pense du langage, il est possible d'écrire du <q>beau</q> code en PHP, c'est à dire un code qui est efficace tout en étant lisible et évolutif.</p>
<p>Cependant, pour pouvoir en écrire, il y a pré-requis incontournable, connu sous le vocable <abbr titlle="Read The Fucking Manual">RTFM</abbr>, et qui pourrait être traduit, dans un langage beaucoup moins imagé, par le faite de prendre la peine de lire régulièrement et en profondeur la documentation de <a href="http://www.php.net">PHP</a>.</p>
<p>C'est d'ailleurs la première chose que je demande à mes stagiaires lors de leur arrivée.</p>
<p>Ils me prennent alors bien souvent pour un dingue, mais ils finissent toujours par comprendre l'intérêt de la démarche, car ils découvrent systématiquement des pépites (cette fois dans le bon sens du terme) qui leur simplifie leur travail.</p>
<p>Car s'il y a une chose qu'il est possible de dire au sujet des cas présentés ci-dessus, c'est qu'il laisse transparaître une méconnaissance totale de certaines fonctions pourtant très basiques, mais au combien puissantes, du langage.</p>
<p>À bon entendeur...</p>http://blog.mageekbox.net/?post/2011/05/10/Floril%C3%A8ge-1#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/259