Node.js: come gestire i parametri opzionali

Lavorando con Node.js possiamo realizzare applicazioni interattive senza la necessita di conoscere un linguaggio di programmazione di pagine dinamiche. Sia per realizzare l'interfaccia, sia per gestire la persistenza dei dati degli utenti, possiamo usare la sintassi JavaScript. Considerando tale scenario di lavoro e importante sapere come definire le firme dei metodi delle funzioni JavaScript. In altre parole e bene che le nostre librerie siano scritte fornendo delle API robuste e usando una notazione standard.

Gestione delle callback

Gestione delle callback

Consideriamo il seguente scenario: abbiamo una funzione Node.js che prende in ingresso tre parametri. Il primo parametro è sempre obbligatorio, il secondo parametro è opzionale, il terzo parametro è una callback obbligatoria. Ciò significa che la funzione può essere invocata con due o tre parametri, a seconda che l’utente valorizzi o meno il parametro “centrale”. Un esempio di funzione di questo tipo è la seguente

Dove la keyword opt identifica il parametro opzionale. Ciò significa che la funzione potrebbe essere invocata in questi modi

per semplicità, qui sopra abbiamo usato come callback una banale funzione che stampa il solito messaggio “Ciao mondo!”. Si potrebbe pensare di gestire la situazione come a pagina precedente, cioè usando gli operatori typeof e “===”. Ciò è corretto se prestiamo attenzione alla posizione del parametro che identifica la callback. Un modo di farlo è il seguente

Come si vede dal codice qui sopra la callback potrebbe andare a finire nella variabile (locale) opt oppure nella variabile (sempre locale) cb. In altre parole, se il parametro opzionale non viene precisato al momento dell’invocazione della funzione, tutti i parametri alla sua destra (in questo caso solo la callback) vengono traslati di un posto verso sinistra. Ecco perché, quando il parametro opzionale non viene precisato, per eseguire la callback dobbiamo invocare l’istruzione opt() anziché l’istruzione cb().

Quest’ultimo accorgimento, unito alla gestione della variabile arguments vista nel primo esempio, permette di definire delle API che siano robuste, più robuste ai bug e soprattutto scritte usando le consuetudini normalmente accettate. Questo è un aspetto da tenere in mente prima di iniziare a lavorare su un grosso progetto, perché la definizione delle API è particolarmente importante nell’architettura di Node.js. Le applicazioni Node.js sono spesso modulari, per questo motivo consigliamo di progettare e definire con molta cura le API delle diverse librerie, tenendo conto delle linee guida qui suggerite.