Sulla scrittura di codice intelligente con array in WordPress
Non so se esiste uno standard per quello che è considerato "codice intelligente", ma penso che se dovessi mostrare vari esempi di codice ai programmatori, sarebbero in grado di conoscerlo quando lo vedranno.
E c’è stato un periodo nella mia carriera in cui ero molto interessato a scrivere codice intelligente. Ma più invecchio e più lavoro svolgo nella manutenzione dei progetti, meno mi preoccupo di scrivere codice intelligente e più sono interessato a scrivere codice chiaro, da leggere e quindi da mantenere.
Il codice intelligente è per gli uccelli. Perdonate questi stupidi giochi di parole.
Quando lavoriamo con WordPress, probabilmente abbiamo a che fare molto con gli array, soprattutto dato che gran parte degli interni di WordPress sono basati su di essi (sì, ci sono anche alcuni oggetti, ma gli array sono pervasivi).
Che aspetto ha, quindi, il codice intelligente con gli array in WordPress rispetto al codice meno intelligente? E inoltre, dovremmo evitare di mirare a scrivere codice intelligente?
Codice intelligente con array
Le funzioni di array sono probabilmente uno dei più grandi insiemi di funzioni in PHP.
Naturalmente, scrivere codice intelligente con WordPress sembra adattarsi in parte e in parte all’ambiente, giusto? Non sto dicendo che sia affatto male. Sto solo dicendo che quando hai funzioni nello spazio dei nomi globale che funzionano con array che restituiscono array, è fin troppo facile scrivere chiamate nidificate che alla fine richiedono un po’ più di lavoro mentale per analizzare ciò che sta facendo il codice.
Certo, scriverne è una cosa, ma forse ha senso guardare un esempio di come potrebbe essere il codice intelligente con WordPress e quindi come può essere rifattorizzato.
Un esempio
Supponiamo, ad esempio, di avere un post e di aggiornare l’estratto del post in modo che un nome contenuto nell’estratto debba essere rimosso. Quando ciò accade non è necessariamente importante (sebbene delete_user non sia difficile da immaginare, giusto?)
Fin dall’inizio ci viene dato:
- l’ID del post,
- il nome della persona da rimuovere.
Un modo per farlo sarebbe usare una combinazione di array, array_map, esplodere, array_diff, implode. Tutto per questo:
- array per creare un array della persona (perché, come array, è richiesto in seguito),
- array_map per tagliare lo spazio bianco dopo aver fatto esplodere l’estratto in un array,
- array_diff per trovare le stringhe rimaste dopo aver rimosso un nome,
- e implode per ricostruire il risultato in una stringa per post_excerpt.
Ok, quindi, detto questo, ecco come potrebbe essere un esempio di codice intelligente in 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) ),
),
);
Ma è un sacco di annidamento, e di solito dobbiamo iniziare dall’esterno e sapere cosa sta facendo ogni funzione, giusto?
Per ripulirlo, dobbiamo ancora occuparci delle funzioni elencate sopra, ma possiamo suddividere le cose in passaggi più facili da leggere (insieme ai commenti sul codice) per rendere più facile l’analisi per un altro sviluppatore.
Forse potrebbe assomigliare a questo :
<?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 );
Ora, è questo il modo di farlo? Non lo so. Ma è un modo per farlo. Ed è una di quelle situazioni più facili da leggere e da seguire.
Quindi forse non è scrivere codice intelligente in WordPress, ma non so – né penso – che dovrebbe essere il nostro obiettivo.
Dovremmo mirare a scrivere un codice intelligente?
Il Manuale di WordPress afferma quanto segue:
In generale, la leggibilità è più importante dell’intelligenza o della brevità.
E poi passa a fare un esempio. A questo punto della mia carriera, tendo ad essere d’accordo:
- codice intelligente non equivale a codice più performante,
- il codice intelligente spesso impiega più tempo per saltare attraverso più cerchi mentali rispetto al codice dettagliato,
- il codice intelligente è quindi più difficile da mantenere, specialmente quando si passa a una base di codice precedente.
Infine, penso che persone diverse potrebbero considerare un codice più intelligente di altri, ma c’è anche un codice che molti di noi considererebbero un tentativo di essere più intelligente che no.
In definitiva, mira a scrivere il codice in qualsiasi modo tu voglia scrivere, ma scrivi pensando a un altro sviluppatore: se ti sei mai lamentato del fatto che un pezzo di codice è difficile da decifrare a prima vista, è probabile che sia stato scritto male o fosse un cerca di essere intelligente. Quindi non essere quel ragazzo o quella ragazza che sta passando i soldi al prossimo sviluppatore.
Cerca invece di scrivere un codice chiaro e di utilizzare i commenti quando necessario.