Sobre escribir código inteligente con matrices en WordPress
No sé si existe un estándar para lo que se considera "código inteligente", pero creo que si mostraras varias muestras de código a los programadores, podrían saberlo cuando lo vean.
Y hubo un momento en mi carrera en el que estaba muy interesado en escribir código inteligente. Pero cuanto mayor me hago y cuanto más trabajo hago en el mantenimiento de proyectos, menos me preocupa escribir código inteligente y más interesado estoy en escribir código que sea claro y leído y, por lo tanto, mantenido.
El código inteligente es para los pájaros. Perdón por estos estúpidos juegos de palabras.
Cuando trabajamos con WordPress, es probable que estemos lidiando mucho con matrices, especialmente dado que gran parte de las funciones internas de WordPress se basan en ellas (sí, también hay algunos objetos, pero las matrices son omnipresentes).
Entonces, ¿cómo se ve el código inteligente con matrices en WordPress en comparación con el código menos inteligente? Y además, ¿deberíamos evitar apuntar a escribir código inteligente?
Código inteligente con matrices
Podría decirse que las funciones de matriz son uno de los conjuntos de funciones más grandes de PHP.
Naturalmente, escribir código inteligente con WordPress parece encajar parcialmente con el entorno, ¿verdad? No digo que sea malo en absoluto. Solo digo que cuando tiene funciones en el espacio de nombres global que funcionan con matrices que devuelven matrices, es demasiado fácil escribir llamadas anidadas que, en última instancia, requieren un poco más de trabajo mental para analizar lo que está haciendo el código.
Claro, escribir sobre eso es una cosa, pero tal vez tenga sentido ver un ejemplo de cómo se vería un código inteligente con WordPress y luego cómo se puede refactorizar.
Un ejemplo
Digamos, por ejemplo, que tenemos una publicación y estamos actualizando el extracto de la publicación, por lo que es necesario eliminar un nombre que está contenido en el extracto. Cuando esto sucede, no es necesariamente importante (aunque delete_user no es difícil de imaginar, ¿verdad?)
Desde el principio, se nos da:
- la identificación de la publicación,
- el nombre de la persona a eliminar.
Una forma de hacer esto sería usar una combinación de array, array_map, explosion, array_diff, implode. Todo por este motivo:
- matriz para crear una matriz de la persona (porque, como matriz, se requiere más adelante),
- array_map para recortar el espacio en blanco después de explotar el extracto en una matriz,
- array_diff para encontrar las cadenas que quedan después de eliminar un nombre,
- e implosionar para reconstruir el resultado nuevamente en una cadena para post_excerpt.
Bien, dicho esto, así es como se ve un ejemplo de código inteligente en 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) ),
),
);
Pero es mucho anidamiento, y generalmente tenemos que comenzar desde afuera hacia adentro y saber qué está haciendo cada función, ¿verdad?
Para limpiarlo, todavía tenemos que lidiar con las funciones que se enumeran anteriormente, pero podemos dividir las cosas en pasos más fáciles de leer (junto con los comentarios del código) para que sea más fácil de analizar para otro desarrollador.
Tal vez podría verse algo como esto :
<?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 );
Ahora, ¿es esta la manera de hacerlo? No sé. Pero es una manera de hacerlo. Y es una de esas situaciones que es más fácil de leer y seguir.
Entonces, tal vez no sea escribir un código inteligente en WordPress, pero no sé, ni creo, que ese sea el objetivo.
¿Deberíamos apuntar a escribir un código inteligente?
El manual de WordPress establece lo siguiente:
En general, la legibilidad es más importante que la inteligencia o la brevedad.
Y luego procede a dar un ejemplo. En este punto de mi carrera, tiendo a estar de acuerdo:
- código inteligente no equivale a un código de mayor rendimiento,
- el código inteligente a menudo tarda más en saltar a través de más aros mentales que el código detallado,
- Por lo tanto, el código inteligente es más difícil de mantener, especialmente cuando se salta a una base de código más antigua.
Finalmente, creo que diferentes personas podrían considerar un código más inteligente que otro, pero también hay código que muchos de nosotros consideraríamos un intento de ser más inteligente que no.
En última instancia, trate de escribir código como quiera, pero escriba pensando en otro desarrollador: si alguna vez se ha quejado de que un fragmento de código es difícil de descifrar a primera vista, lo más probable es que esté mal escrito o sea un error. intentar ser inteligente. Así que no seas ese chico o chica que le pasa la pelota al siguiente desarrollador.
En su lugar, trate de escribir un código claro y use comentarios cuando sea necesario.