Functional Programming
Se sei uno sviluppatore di software, avrai forse già sentito parlare della programmazione funzionale e delle sue incredibili funzionalità. Questo articolo è indirizzato a tutti i programmatori che vogliono avere una prima infarinatura su questo utile paradigma di programmazione ed iniziare a sfruttarlo nel loro codice. Il functional programming si basa sulle funzioni e permette di elaborare in modo semplice ed efficace liste di dati, creando nuovi stati a partire dagli input in ingresso. Questo paradigma viene usato sempre più spesso, in quanto garantisce ottime performance e integrità del codice. In particolare verrà descritta la differenza tra programmazione funzionale e ad oggetti, in seguito invece saranno definiti i metodi map, filter e reduce, con esempi nei due linguaggi JavaScript e Python.
Functional Programming vs OOP
La programmazione funzionale è molto diffusa grazie, tra i molteplici vantaggi, alla sua immutabilità, ovvero dato lo stesso input ad una funzione essa restituisce sempre ed esattamente lo stesso risultato. Questo permette di avere un’alta riduzione di errori e creare codice modulare, replicabile ed efficace. La programmazione ad oggetti, proprio come dice il nome, si basa su oggetti che descrivono tutti gli elementi utili all’interno del codice. Uno dei punti forti di questo paradigma è l’incapsulazione, cioè la proprietà di un oggetto di nascondere variabili al suo interno, garantendo un buon livello di sicurezza.
Vediamo con un esempio la differenza tra questi due paradigmi, prendiamo per esempio il caricamento di dati da server in una pagina web. Tramite la OOP viene richiesto di creare una lista vuota di dati in memoria e gli oggetti grafici, mostrare uno spinner e nasconderlo non appena i dati sono pronti. Questo implica che gli elementi grafici della pagina devono essere gestiti manualmente, aumentando la possibilità di incappare in problemi come memory leak, null reference e allocamento inutile di memoria. Nel FP invece gli oggetti grafici possono essere creati e modificati da una funzione che si basa sullo stato del caricamento dei dati. Ciò risulta meno intuitivo da implementare, ma porta a risultati più veloci e precisi.
I due paradigmi differiscono quindi su molti punti, e possono avere diversi utilizzi in base alle esigenze di progetto, vediamo alcune delle differenze più importanti:
- Nella programmazione funzionale vengono utilizzati dati immutabili, a differenza di quelli mutabili che ritroviamo nella programmazione ad oggetti.
- La OOP necessità di un determinato ordine di esecuzione degli step dell’applicativo.
- La FP segue il modello di programmazione dichiarativo, mentre l’OOP si basa su quello imperativo.
- Solamente il functional programming permette di gestire la programmazione parallela.
La programmazione a oggetti è un modello più lineare e semplice da comprendere, ma diventa presto complicato da mantenere quando gli oggetti da gestire diventano molti. Il functional programming invece permette di controllare in modo semplice lo stato di applicazioni anche complesse, questo però a discapito della comprensione del codice e della curva di apprendimento.
Metodi del Functional Programming
Map
Il metodo map genera una lista di elementi a partire da un oggetto iterabile. Questo metodo richiede due elementi principali, l’oggetto iterabile sulla quale verrà richiamato il metodo map e la funzione richiamata automaticamente da map su ogni elemento dell’oggetto iterabile. Vediamo ora qualche esempio nei linguaggi di programmazione JavaScript e Python.
Esempio Javascript:
Data un array di oggetti estrarre da ognuno di essi l’ID.
Esempio Python:
Data una lista di stringhe estrarre la lunghezza di ognuna.
Filter
Il metodo filter applicato un un oggetto iterabile, consente di filtrare i suoi elementi in modo automatico. Da questo metodo viene estratto una nuova lista contenente tutti gli elementi dell’oggetto iterabile che soddisfano le condizioni della funzione filtro data in pasto al metodo filter. Questa funzionalità è particolarmente utile in situazioni in cui gli elementi che si vogliono estrarre sono sparsi all’interno dell’oggetto iterabile, o hanno condizioni particolari ed eterogenee. Vediamo alcuni esempi di utilizzo di questo metodo:
Esempio Javascript:
Selezionare solo gli studenti che hanno passato l’esame di programmazione.
Esempio Python:
Estrarre gli gli studenti con età maggiore di 4 caratteri.
Reduce
Infine, vediamo il metodo reduce, sicuramente uno dei più interessanti metodi relativi alla programmazione funzionale. Reduce permette di sintetizzare una lista di elementi in un singolo risultato. L’esempio più utilizzato per mostrare questo metodo è la somma, data una lista di numeri è semplice e immediato attraverso reduce avere la somma di tutti i numeri presenti nella lista. Vediamo come si presenta il codice di questo metodo nei due linguaggi prescelti:
Esempio Javascript:
Sottrarre tutti i numeri dell’array partendo da destra.
Esempio Python:
Sommare tutti gli elementi della lista.
Contattaci alla mail info@atobit.it per una consulenza o un preventivo, il nostro team di esperti è pronto per aiutarti a realizzare il tuo progetto.