Sobre como escrever código inteligente com arrays no WordPress
Não sei se existe um padrão para o que é considerado “código inteligente", mas acho que se você mostrar vários exemplos de código para programadores, eles saberão quando virem.
E costumava haver um tempo em minha carreira em que eu estava muito interessado em escrever código inteligente. Mas quanto mais velho fico e quanto mais trabalho faço na manutenção de projetos, menos me preocupo em escrever código inteligente e mais interessado em escrever código que seja claro e lido e, portanto, mantido.
Código inteligente é para os pássaros. Perdoe esses trocadilhos idiotas.
Quando trabalhamos com o WordPress, provavelmente lidamos muito com arrays, especialmente porque muitos dos componentes internos do WordPress são construídos sobre eles (sim, também existem alguns objetos, mas os arrays são difundidos).
Como é, então, o código inteligente com arrays no WordPress versus o código menos inteligente? E, além disso, devemos evitar o objetivo de escrever código inteligente?
Código inteligente com arrays
As funções de matriz são indiscutivelmente um dos maiores conjuntos de funções em PHP.
Naturalmente, escrever código inteligente com o WordPress parece se encaixar parcialmente no ambiente, certo? Não estou dizendo que é ruim. Estou apenas dizendo que quando você tem funções no namespace global que trabalham com arrays que retornam arrays, é muito fácil escrever chamadas aninhadas que exigem um pouco mais de trabalho mental para analisar o que o código está fazendo.
Claro, escrever sobre isso é uma coisa, mas talvez faça sentido olhar para um exemplo de como pode ser um código inteligente com o WordPress e como ele pode ser refatorado.
Um exemplo
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ão é necessariamente importante (embora delete_user não seja difícil de imaginar, certo?)
Desde o início, nos é dado:
- o código de postagem,
- o nome da pessoa a ser removida.
Uma maneira de fazer isso seria usar uma combinação de array, array_map, explodir, array_diff, implode. Tudo por este motivo:
- array para criar um array da pessoa (porque, como array, é necessário mais tarde),
- array_map para cortar o espaço em branco depois de explodir o trecho em uma matriz,
- array_diff para encontrar as strings restantes após a remoção de um nome,
- e implode para reconstruir o resultado de volta em uma string para o post_excerpt.
Ok, com isso dito, aqui está um exemplo de como pode ser um código inteligente no WordPress :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt =
apply_filters(
'the_excerpt',
implode( ', ',
array_diff(
array_map(
'trim',
explode( ',', $excerpt) ),
array( $name) ),
),
);
Mas é muito aninhamento, e geralmente temos que começar de fora para dentro e saber o que cada função está fazendo, certo?
Para limpá-lo, ainda temos que lidar com as funções listadas acima, mas podemos dividir as coisas em etapas mais fáceis de ler (juntamente com comentários de código) para facilitar a análise de outro desenvolvedor.
Talvez possa ser algo assim :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
// Remove the name from the array of names in the excerpt.
$to_remove = array( $name );
$names = array_map( 'trim', explode( ',', $excerpt) );
$result = array_diff( $names, $to_remove );
// Now creae the new excerpt.
$new_excerpt = implode( ', ', $result );
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );
Agora, esta é a maneira de fazê-lo? Não sei. Mas é uma forma de fazer isso. E é uma daquelas situações que é mais fácil de ler e seguir.
Então talvez não seja escrever código inteligente no WordPress, mas eu não sei – nem acho – que deveria ser o nosso objetivo.
Devemos ter como objetivo escrever código inteligente?
O Manual do WordPress afirma o seguinte:
Em geral, a legibilidade é mais importante do que a inteligência ou a brevidade.
E então passa a dar um exemplo. Neste ponto da minha carreira, tendo a concordar:
- código inteligente não equivale a código mais performático,
- código inteligente geralmente leva mais tempo para pular por mais obstáculos mentais do que código detalhado,
- código inteligente é, portanto, mais difícil de manter, especialmente ao saltar para uma base de código mais antiga.
Finalmente, acho que pessoas diferentes podem considerar alguns códigos mais inteligentes do que outros, mas também há códigos que muitos de nós considerariam uma tentativa de ser mais inteligente do que não.
Em última análise, tente escrever o código da maneira que você quiser, mas escreva com outro desenvolvedor em mente: se você já reclamou que um pedaço de código é difícil de decifrar à primeira vista, as chances são de que foi mal escrito ou foi um tente ser inteligente. Portanto, não seja aquele cara ou garota que está passando a responsabilidade para o próximo desenvolvedor.
Em vez disso, tente escrever um código claro e use comentários quando necessário.