{"id":229337,"date":"2022-11-01T18:09:00","date_gmt":"2022-11-01T15:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229337"},"modified":"2022-11-09T06:34:00","modified_gmt":"2022-11-09T03:34:00","slug":"sur-lecriture-de-code-intelligent-avec-des-tableaux-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/sur-lecriture-de-code-intelligent-avec-des-tableaux-dans-wordpress\/","title":{"rendered":"Sur l&rsquo;\u00e9criture de code intelligent avec des tableaux dans WordPress"},"content":{"rendered":"\n<p>Je ne sais pas s&rsquo;il existe une norme pour ce qui est consid\u00e9r\u00e9 comme un &quot;code intelligent&quot;, mais je pense que si vous deviez montrer divers exemples de code aux programmeurs, ils pourraient le savoir quand ils le verraient.<\/p>\n<p>Et il fut un temps dans ma carri\u00e8re o\u00f9 j&rsquo;\u00e9tais tr\u00e8s int\u00e9ress\u00e9 par l&rsquo;\u00e9criture de code intelligent. Mais plus je vieillis et plus je travaille \u00e0 la maintenance des projets, moins je suis pr\u00e9occup\u00e9 par l&rsquo;\u00e9criture de code intelligent et plus je suis int\u00e9ress\u00e9 par l&rsquo;\u00e9criture de code clair et lisible et donc maintenu.<\/p>\n<p>Le code intelligent est pour les oiseaux. Pardonnez ces jeux de mots stupides.<\/p>\n<p>Lorsque nous travaillons avec WordPress, nous avons probablement beaucoup affaire \u00e0 des tableaux, d&rsquo;autant plus qu&rsquo;une grande partie des \u00e9l\u00e9ments internes de WordPress sont construits sur eux (oui, il y a aussi des objets, mais les tableaux sont omnipr\u00e9sents).<\/p>\n<p>\u00c0 quoi ressemble alors un code intelligent avec des tableaux dans WordPress par rapport \u00e0 un code moins intelligent? Et de plus, faut-il \u00e9viter de viser \u00e0 \u00e9crire du code intelligent ?<\/p>\n<h2>Code intelligent avec des tableaux<\/h2>\n<p>Les fonctions de tableau sont sans doute l&rsquo;un des plus grands ensembles de fonctions en PHP.<\/p>\n<p>Naturellement, \u00e9crire du code intelligent avec WordPress semble correspondre en partie \u00e0 l&rsquo;environnement, n&rsquo;est-ce pas? Je ne dis pas que c&rsquo;est mauvais du tout. Je dis simplement que lorsque vous avez des fonctions dans l&rsquo;espace de noms global qui fonctionnent avec des tableaux qui renvoient des tableaux, il est beaucoup trop facile d&rsquo;\u00e9crire des appels imbriqu\u00e9s qui n\u00e9cessitent finalement un peu plus de travail mental pour analyser ce que fait le code.<\/p>\n<p>Bien s\u00fbr, \u00e9crire \u00e0 ce sujet est une chose, mais il est peut-\u00eatre logique de regarder un exemple de ce \u00e0 quoi pourrait ressembler un code intelligent avec WordPress et ensuite comment il peut \u00eatre refactoris\u00e9.<\/p>\n<h3>Un exemple<\/h3>\n<p>Supposons, par exemple, que nous ayons une publication et que nous mettions \u00e0 jour l&rsquo;extrait de publication afin qu&rsquo;un nom contenu dans l&rsquo;extrait doive \u00eatre supprim\u00e9. Quand cela se produit n&rsquo;est pas n\u00e9cessairement important (bien que <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> ne soit pas difficile \u00e0 imaginer, n&rsquo;est-ce pas\u00a0?)<\/p>\n<p>D\u00e8s le d\u00e9part, on nous donne :<\/p>\n<ul>\n<li>l&rsquo;identifiant du poste,<\/li>\n<li>le nom de la personne \u00e0 supprimer.<\/li>\n<\/ul>\n<p>Une fa\u00e7on de faire serait d&rsquo;utiliser une combinaison de <a href=\"https:\/\/php.net\/manual\/en\/language.types.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.explode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">exploser<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-diff.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_diff<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode<\/a>. Tout \u00e7a pour cette raison :<\/p>\n<ul>\n<li>tableau pour cr\u00e9er un tableau de la personne (car il, en tant que tableau, est requis plus tard),<\/li>\n<li>array_map pour couper l&rsquo;espace blanc apr\u00e8s avoir explos\u00e9 l&rsquo;extrait dans un tableau,<\/li>\n<li>array_diff pour trouver les cha\u00eenes qui restent apr\u00e8s la suppression d&rsquo;un nom,<\/li>\n<li>et implose pour reconstruire le r\u00e9sultat dans une cha\u00eene pour le post_excerpt.<\/li>\n<\/ul>\n<p>Bon, cela dit, voici \u00e0 quoi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">peut ressembler<\/a> un exemple de code intelligent dans WordPress\u00a0:<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = \n  apply_filters( \n    'the_excerpt', \n    implode( ', ', \n      array_diff( \n        array_map( \n          'trim', \n          explode( ',', $excerpt) ), \n      array( $name) ),\n    ),\n  );<\/code><\/pre>\n<p>Mais il y a beaucoup d&rsquo;imbrication, et nous devons g\u00e9n\u00e9ralement commencer de l&rsquo;ext\u00e9rieur vers l&rsquo;int\u00e9rieur et savoir ce que fait chaque fonction, n&rsquo;est-ce pas\u00a0?<\/p>\n<p>Pour le nettoyer, nous devons encore g\u00e9rer les fonctions r\u00e9pertori\u00e9es ci-dessus, mais nous pouvons d\u00e9composer les choses en \u00e9tapes plus faciles \u00e0 lire (avec des commentaires de code) pour faciliter l&rsquo;analyse par un autre d\u00e9veloppeur.<\/p>\n<p>Peut-\u00eatre que cela pourrait ressembler <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/\/ Remove the name from the array of names in the excerpt.\n$to_remove = array( $name );\n$names     = array_map( 'trim', explode( ',', $excerpt) );\n$result    = array_diff( $names, $to_remove );\n\n\/\/ Now creae the new excerpt.\n$new_excerpt = implode( ', ', $result );\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );<\/code><\/pre>\n<p>Maintenant, est-ce la fa\u00e7on de faire? Je ne sais pas. Mais c&rsquo;est une fa\u00e7on de faire. Et c&rsquo;est une de ces situations qui est plus facile \u00e0 lire et \u00e0 suivre.<\/p>\n<p>Alors peut-\u00eatre qu&rsquo;il ne s&rsquo;agit pas d&rsquo;\u00e9crire du code intelligent dans WordPress, mais je ne sais pas \u2013 ni ne pense \u2013 que cela devrait \u00eatre notre objectif.<\/p>\n<h2>Devrions-nous viser \u00e0 \u00e9crire du code intelligent\u00a0?<\/h2>\n<p>Le <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manuel WordPress<\/a> indique ce qui suit :<\/p>\n<blockquote>\n<p>En g\u00e9n\u00e9ral, la lisibilit\u00e9 est plus importante que l&rsquo;intelligence ou la bri\u00e8vet\u00e9.<\/p>\n<\/blockquote>\n<p>Et proc\u00e8de ensuite \u00e0 donner un exemple. \u00c0 ce stade de ma carri\u00e8re, j&rsquo;ai tendance \u00e0 \u00eatre d&rsquo;accord\u00a0:<\/p>\n<ul>\n<li>code intelligent n&rsquo;est pas synonyme de code plus performant,<\/li>\n<li>le code intelligent prend souvent plus de temps pour sauter \u00e0 travers plus de cerceaux mentaux que le code verbeux,<\/li>\n<li>le code intelligent est donc plus difficile \u00e0 maintenir, en particulier lors du saut dans une base de code plus ancienne.<\/li>\n<\/ul>\n<p>Enfin, je pense que diff\u00e9rentes personnes pourraient consid\u00e9rer certains codes plus intelligents que d&rsquo;autres, mais il y a aussi du code que beaucoup d&rsquo;entre nous consid\u00e9reraient comme une tentative plus intelligente que non.<\/p>\n<p>En fin de compte, essayez d&rsquo;\u00e9crire du code comme vous le souhaitez, mais \u00e9crivez en pensant \u00e0 un autre d\u00e9veloppeur\u00a0: si vous vous \u00eates d\u00e9j\u00e0 plaint qu&rsquo;un morceau de code \u00e9tait difficile \u00e0 d\u00e9chiffrer au premier coup d&rsquo;\u0153il, il y a de fortes chances qu&rsquo;il ait \u00e9t\u00e9 mal \u00e9crit ou qu&rsquo;il s&rsquo;agissait d&rsquo;un essayer d&rsquo;\u00eatre intelligent. Alors ne soyez pas ce gars ou cette fille qui renvoie la responsabilit\u00e9 au prochain d\u00e9veloppeur.<\/p>\n<p>Au lieu de cela, essayez d&rsquo;\u00e9crire un code clair et utilisez des commentaires si n\u00e9cessaire.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c0 quoi ressemble un code intelligent avec des tableaux dans WordPress par rapport \u00e0 un code moins intelligent\u00a0? Et faut-il \u00e9viter de viser \u00e0 \u00e9crire du code intelligent ?<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801,862],"tags":[1167],"class_list":["post-229337","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229337"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229337\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}