Tra i vari testi della collana
Pocket di
Apogeo, mi ha incuriosito molto il testo
Espressioni regolari, ancor più leggendo il sottotitolo
"Inventate nel 1950 ma ancora oggi insostituibili: le regexp". Ritenendo che, nonostante fosse un argomento molto importante per la programmazione, potesse essere trattato adeguatamente in un libro "tascabile" mi sono cimentato nella lettura.
Si tratta di un testo composto da 23 capitoli e 3 appendici dalle dimensioni molto ridotte, atti a trattare singolarmente ogni aspetto importante delle
espressioni regolari (regexp). I capitoli possono essere idealmente raggruppati in quattro categorie principali.
Dopo una piccola introduzione anche storica, come in ogni buon testo degno di tale nome, la prima parte è prettamente introduttiva. I due capitoli che la compongono, infatti, parlano dei vantaggi di tale strumento a scapito di un algoritmo, che implementi la stessa ricerca di esempio in una stringa; poi vengono indicate due modalità per testare quanto spiegato sulle espressioni regolari nei capitoli successivi: un tool on line ed uno freeware stand alone da installare sul proprio PC. Questa scelta è molto utile, perché l'intero testo si basa su esempi per mettere in evidenza sia le necessità di base, che l'utilizzo pratico di ancoraggi, quantificatori, classi, gruppi, modificatori ed altro.
La seconda e la terza parte di questo mio ideale raggruppamento sono molto legate tra loro. Nella seconda, che va dal terzo al nono capitolo, vengono trattati gli elementi basilari delle
regexp, ossia caratteri normali e speciali, stringhe semplici, il carattere jolly
".", cifre e spazi, i set di caratteri, le parole e l'inizio e la fine di righe e testi. Praticamente, vengono messi in evidenza i metodi per effettuare le operazioni più semplici con le
espressioni regolari; acquisite tali nozioni l'appendice C si occuperà di riportarci alla mente il significato di quanto studiato in caso di necessità.
L’appendice C è composta, infatti, da una tabella riassuntiva contenente i riferimenti su quanto appreso durante la lettura dell'intero il libro: l'ideale da avere sempre con sé se si deve lavorare con le
espressioni regolari e si è già letto bene tutto il testo.
La terza parte, che prosegue fino al capitolo 15, è molto più "divertente" della seconda in quanto evidenzia come comportarsi con le
regexp, quando si ha ha che fare con problemi più complessi da affrontare. In questa sede, si parla infatti dei quantificatori, di gruppi e alternative, di come indicare caratteri Unicode e ASCII, delle modalità di
lookaround, di altri inusuali caratteri speciali trattati per completezza del testo ed infine dei modificatori. Con questa parte tutto quello che c'è da sapere sulle
regexp è stato trattato e il testo potrebbe terminare qui, dopo circa un centinaio di pagine.
Invece c'è un'ultima parte, la quarta, in cui viene spiegato come utilizzare le
espressioni regolari con alcuni tra i principali linguaggi di programmazione. In questi capitoli è dimostrato, con un piccolo ed efficace esempio, come integrare le
espressioni regolari all'interno del codice su cui si sta lavorando, ammesso che si tratti di Python (capitolo 16), Ruby (capitolo 17), Perl (capitolo 18), PHP (capitolo 19), JavaScript (capitolo 20), Java (capitolo 21), .NET (con C#, nel capitolo 22) e Visual Basic (nella versione tradizionale non .NET, nel capitolo 23).
L'appendice A parla brevemente di come possono essere implementati i motori di
regexp tramite una breve trattazione di automi a stati finiti deterministici e non deterministici, utile a capire almeno marginalmente come funzionano i motori di ricerca delle
espressioni regolari.
Avendo già parlato dell’appendice C, non resta che l'appendice B che contiene, infine, quattro esempi di utilizzo delle
espressioni regolari.
A conclusione del testo, scritto in una maniera così semplice da permettere una leggera e piacevole lettura che spingerebbe quasi a finirlo tutto d'un fiato, si pensa subito che l'autore,
Marco Beri, laureato in Scienze dell'Informazione e responsabile dello sviluppo software nella propria azienda, abbia fatto bene il proprio lavoro nella programmazione e stesura degli argomenti trattati.
Gioca a favore della facilità di lettura anche l'impaginazione del testo di
Apogeo, che rende il tutto ancor più scorrevole. Se la divisione del testo in minicapitoli è, infatti, un'ottima idea per favorire l'apprendimento, ritengo che il punto forte del libro sia proprio l'organizzazione contenutistica degli stessi. In ognuno, per quanto riguarda la parte descrittiva delle
regexp che va — ripeto — dal terzo al quindicesimo, viene sollevata una problematica e viene dimostrato come risolverla, mettendo in evidenza utilità ed eventuali vantaggi su altri metodi degli argomenti in questione.
In pratica, il testo è un manuale per l'apprendimento delle
espressioni regolari ben strutturato, in cui le pagine sono contemporaneamente sia quanto necessario a comprendere un argomento, sia un riferimento allo stesso per le rapide consultazioni future. In tale ottica, forse l'appendice B avrebbe potuto contenere più esempi, in modo da indurre il lettore a cercare la soluzione al problema da sé, confrontandola con quella dell’autore.
Altra pecca è la trattazione degli argomenti a volte troppo esaustiva. Se infatti a prima vista può sembrare una cosa ottima, dall'altra parte c'è da considerare che possa risultare dispersiva, pensando al target cui il testo è destinato: chi acquista un testo sulle
regexp è solitamente un programmatore, che vuole ampliare le proprie conoscenze, e che ad esempio non ha necessità di leggere come installare un'applicazione, avere la definizione di freeware o la storia di un linguaggio di programmazione.
Per concludere è da segnalare che il testo è rilegato solo termicamente e questo non permette una sua lettura intensiva, a meno che non si pongano le dovute attenzioni nell'apertura delle pagine: forse sarebbe stato meglio se i fogli fossero stati anche cuciti.
Ma, tranne che per queste piccolezze, ripeto le mie impressioni molto positive sul testo, che arriva perfettamente allo scopo che si era prefissato: essere un'agile guida all'utilizzo delle
regexp.