Atobit
Atobit

Editor

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

Atobit IMG 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.

Atobit IMG MAP 1

Esempio Python:
Data una lista di stringhe estrarre la lunghezza di ognuna.

Atobit IMG MAP 2

Filter

Atobit IMG 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.

Atobit IMG Filter 1

Esempio Python:
Estrarre gli gli studenti con età maggiore di 4 caratteri.

Reduce

Atobit IMG 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.

Atobit IMG Reduce 1

Esempio Python:
Sommare tutti gli elementi della lista.

Atobit IMG Reduce 2

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.

  • Software
  • Coding

Condividi l'articolo

Leggi altri articoli

Il mondo IT è sofisticato, lo sappiamo.

Bisogno di aiuto?

Scrivici per una consulenza gratuita.