{"id":229426,"date":"2022-11-01T18:05:00","date_gmt":"2022-11-01T15:05:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229426"},"modified":"2022-11-09T06:59:52","modified_gmt":"2022-11-09T03:59:52","slug":"sobre-como-escrever-codigo-inteligente-com-arrays-no-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/sobre-como-escrever-codigo-inteligente-com-arrays-no-wordpress\/","title":{"rendered":"Sobre como escrever c\u00f3digo inteligente com arrays no WordPress"},"content":{"rendered":"\n<p>N\u00e3o sei se existe um padr\u00e3o para o que \u00e9 considerado &#8220;c\u00f3digo inteligente&quot;, mas acho que se voc\u00ea mostrar v\u00e1rios exemplos de c\u00f3digo para programadores, eles saber\u00e3o quando virem.<\/p>\n<p>E costumava haver um tempo em minha carreira em que eu estava muito interessado em escrever c\u00f3digo inteligente. Mas quanto mais velho fico e quanto mais trabalho fa\u00e7o na manuten\u00e7\u00e3o de projetos, menos me preocupo em escrever c\u00f3digo inteligente e mais interessado em escrever c\u00f3digo que seja claro e lido e, portanto, mantido.<\/p>\n<p>C\u00f3digo inteligente \u00e9 para os p\u00e1ssaros. Perdoe esses trocadilhos idiotas.<\/p>\n<p>Quando trabalhamos com o WordPress, provavelmente lidamos muito com arrays, especialmente porque muitos dos componentes internos do WordPress s\u00e3o constru\u00eddos sobre eles (sim, tamb\u00e9m existem alguns objetos, mas os arrays s\u00e3o difundidos).<\/p>\n<p>Como \u00e9, ent\u00e3o, o c\u00f3digo inteligente com arrays no WordPress versus o c\u00f3digo menos inteligente? E, al\u00e9m disso, devemos evitar o objetivo de escrever c\u00f3digo inteligente?<\/p>\n<h2>C\u00f3digo inteligente com arrays<\/h2>\n<p>As fun\u00e7\u00f5es de matriz s\u00e3o indiscutivelmente um dos maiores conjuntos de fun\u00e7\u00f5es em PHP.<\/p>\n<p>Naturalmente, escrever c\u00f3digo inteligente com o WordPress parece se encaixar parcialmente no ambiente, certo? N\u00e3o estou dizendo que \u00e9 ruim. Estou apenas dizendo que quando voc\u00ea tem fun\u00e7\u00f5es no namespace global que trabalham com arrays que retornam arrays, \u00e9 muito f\u00e1cil escrever chamadas aninhadas que exigem um pouco mais de trabalho mental para analisar o que o c\u00f3digo est\u00e1 fazendo.<\/p>\n<p>Claro, escrever sobre isso \u00e9 uma coisa, mas talvez fa\u00e7a sentido olhar para um exemplo de como pode ser um c\u00f3digo inteligente com o WordPress e como ele pode ser refatorado.<\/p>\n<h3>Um exemplo<\/h3>\n<p>Digamos, por exemplo, que temos uma postagem e estamos atualizando o trecho da postagem para que um nome contido no trecho precise ser removido. Quando isso acontece n\u00e3o \u00e9 necessariamente importante (embora <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> n\u00e3o seja dif\u00edcil de imaginar, certo?)<\/p>\n<p>Desde o in\u00edcio, nos \u00e9 dado:<\/p>\n<ul>\n<li>o c\u00f3digo de postagem,<\/li>\n<li>o nome da pessoa a ser removida.<\/li>\n<\/ul>\n<p>Uma maneira de fazer isso seria usar uma combina\u00e7\u00e3o 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\">explodir<\/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>. Tudo por este motivo:<\/p>\n<ul>\n<li>array para criar um array da pessoa (porque, como array, \u00e9 necess\u00e1rio mais tarde),<\/li>\n<li>array_map para cortar o espa\u00e7o em branco depois de explodir o trecho em uma matriz,<\/li>\n<li>array_diff para encontrar as strings restantes ap\u00f3s a remo\u00e7\u00e3o de um nome,<\/li>\n<li>e implode para reconstruir o resultado de volta em uma string para o post_excerpt.<\/li>\n<\/ul>\n<p>Ok, com isso dito, aqui est\u00e1 um exemplo de como <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pode ser<\/a> um c\u00f3digo inteligente no WordPress :<\/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>Mas \u00e9 muito aninhamento, e geralmente temos que come\u00e7ar de fora para dentro e saber o que cada fun\u00e7\u00e3o est\u00e1 fazendo, certo?<\/p>\n<p>Para limp\u00e1-lo, ainda temos que lidar com as fun\u00e7\u00f5es listadas acima, mas podemos dividir as coisas em etapas mais f\u00e1ceis de ler (juntamente com coment\u00e1rios de c\u00f3digo) para facilitar a an\u00e1lise de outro desenvolvedor.<\/p>\n<p>Talvez possa ser algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/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>Agora, esta \u00e9 a maneira de faz\u00ea-lo? N\u00e3o sei. Mas \u00e9 uma forma de fazer isso. E \u00e9 uma daquelas situa\u00e7\u00f5es que \u00e9 mais f\u00e1cil de ler e seguir.<\/p>\n<p>Ent\u00e3o talvez n\u00e3o seja escrever c\u00f3digo inteligente no WordPress, mas eu n\u00e3o sei \u2013 nem acho \u2013 que deveria ser o nosso objetivo.<\/p>\n<h2>Devemos ter como objetivo escrever c\u00f3digo inteligente?<\/h2>\n<p>O <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Manual do WordPress<\/a> afirma o seguinte:<\/p>\n<blockquote>\n<p>Em geral, a legibilidade \u00e9 mais importante do que a intelig\u00eancia ou a brevidade.<\/p>\n<\/blockquote>\n<p>E ent\u00e3o passa a dar um exemplo. Neste ponto da minha carreira, tendo a concordar:<\/p>\n<ul>\n<li>c\u00f3digo inteligente n\u00e3o equivale a c\u00f3digo mais perform\u00e1tico,<\/li>\n<li>c\u00f3digo inteligente geralmente leva mais tempo para pular por mais obst\u00e1culos mentais do que c\u00f3digo detalhado,<\/li>\n<li>c\u00f3digo inteligente \u00e9, portanto, mais dif\u00edcil de manter, especialmente ao saltar para uma base de c\u00f3digo mais antiga.<\/li>\n<\/ul>\n<p>Finalmente, acho que pessoas diferentes podem considerar alguns c\u00f3digos mais inteligentes do que outros, mas tamb\u00e9m h\u00e1 c\u00f3digos que muitos de n\u00f3s considerariam uma tentativa de ser mais inteligente do que n\u00e3o.<\/p>\n<p>Em \u00faltima an\u00e1lise, tente escrever o c\u00f3digo da maneira que voc\u00ea quiser, mas escreva com outro desenvolvedor em mente: se voc\u00ea j\u00e1 reclamou que um peda\u00e7o de c\u00f3digo \u00e9 dif\u00edcil de decifrar \u00e0 primeira vista, as chances s\u00e3o de que foi mal escrito ou foi um tente ser inteligente. Portanto, n\u00e3o seja aquele cara ou garota que est\u00e1 passando a responsabilidade para o pr\u00f3ximo desenvolvedor.<\/p>\n<p>Em vez disso, tente escrever um c\u00f3digo claro e use coment\u00e1rios quando necess\u00e1rio.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como \u00e9 o c\u00f3digo inteligente com arrays no WordPress versus o c\u00f3digo menos inteligente? E devemos evitar o objetivo de escrever c\u00f3digo inteligente?<\/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":[898,722,806,867],"tags":[1170],"class_list":["post-229426","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229426"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229426\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}