Node.js: sfruttare a pieno le specifiche di ECMAScript

La somiglianza tra Node.js e JavaScript presenta diversi vantaggi. Il primo vantaggio e ovviamente quello di permettere a chi conosce JavaScript di realizzare pagine server-side per applicazioni enterprise. Il secondo vantaggio e quello di evitare i fastidiosi problemi di sviluppo cross-browser tipici di JavaScript. Per capire la questione conviene fare un passo indietro. Ai suoi albori JavaScript era soltanto uno dei tanti linguaggi di scripting per browser.

map(), some() e reduce()

map(), some() e reduce()

Vediamo altre tre funzioni del paradigma ECMAScript che possiamo usare con Node. Js. La prima funzione si chiama map. Il nome è piuttosto infelice perché non aiuta a ricordare l’uso della funzione, che è semplicemente quello di applicare una funzione (o mappa) a tutti gli elementi del array. Un risultato di questo tipo sarebbe ottenibile mediante un normale ciclo for, ma l’uso della funzione map rende molto più leggibile e mantenibile il codice. Consideriamo ad esempio una funzione che calcoli il quadrato di ogni numero presente nell’array:

che fornisce come risultato i numeri 1,4, 9,16, 25. L’operazione è molto semplice ma il codice beneficia comunque del notevole miglioramento sintattico.

Consideriamo infine due funzioni che permettono di estrarre dei valori di sintesi da un array. Ciò significa che dato un array di 10,100 o 1000 elementi, applicando una funzione di sintesi usiamo un certo algoritmo per calcolare un unico valore rappresentativo di tutti gli elementi dell’array. Il caso più frequente è forse quello di calcolare il valore medio dei numeri di una sequenza, ma il concetto di valore di sintesi si applica a qualsiasi tipologia di dati. Per inciso anche un array contenente stringhe può essere trattato per ottenere un valore di sintesi (ad esempio un acronimo).

La prima funzione di questo tipo è molto semplice: la funzione some ritorna un valore di sintesi booleana, cioè vero o falso. Vediamo come usarla per capire se un certo array contiene almeno un numero pari:

se eseguiamo il codice qui sopra subito dopo quello delle pagine precedenti, ovvero dopo aver filtrato l’array odd in modo che contenga solo numeri dispari, vedremo che la funzione some ritornerà true nel primo caso e false nel secondo caso.

Molto più interessante è la funzione reduce. Essa permette di ridurre tutti gli elementi di un array ad un unico valore, trattandoli a coppie. Ciò significa che la funzione che passiamo come callback deve accettare due argomenti. La prima volta che verrà invocata essa riceverà il primo e secondo argomento, combinandoli assieme e memorizzando il risultato “dell’unione” nel primo argomento. Ciò significa che dopo il primo passaggio un array di 5 elementi verrà ridotto a quattro 4, perché i primi due sono stati “ridotti” o “uniti”. La riduzione è ricorsiva, nel senso che dopo aver ridotto il primo e secondo elemento la funzione prosegue, combinando il “nuovo” primo elemento con il secondo (che in principio era il terzo elemento del array). In altre parole dopo ogni riduzione tutti elementi dell’array vengono traslati verso sinistra, fino a che si ottiene un array con un solo valore: questo sarà il valore di sintesi finale. Vediamo un esempio pratico

in questo caso la funzione pair è la callback che passiamo come argomento della reduce. La funzione pair è abbastanza intelligente, perché decide se accopiare gli elementi su base numerica o come stringa. Eseguendola sul primo array avremo come risultato “abcde”, che è il valore di sintesi del array array_1 (concatenazione degli elementi). Eseguendola sul secondo array avremo invece come risultato “15”, che è il valore di sintesi del array array_2 (somma degli elementi).

Anche le altre funzionalità del linguaggio ECMAScript possono risultare utili, ma non vale la pena approfondirle in questa sede. La maggior parte delle funzionalità ECMAScript riguardano la programmazione ad oggetti. L’importante è ricordarsi che la sintassi Node.js è generalmente più ampia di quella JavaScript: il consiglio è di memorizzare un link alle specifiche ECMAScript tra i propri preferiti e ricordarsi di controllarlo tutte le volte che consultiamo la documentazione delle API JavaScript. In questo modo potremo sfruttare appieno le specifiche ECMAScript che non risultano elencate tra le API JavaScript.