Skip to main content

Cos'è la programmazione funzionale?

La programmazione funzionale è un paradigma di programmazione in cui la base del calcolo è la valutazione delle espressioni.Alcune caratteristiche sono l'uso di funzioni di ordine superiore, trasparenza referenziale e valutazione pigra.I vantaggi dello stile di programmazione includono che i programmi sono facili da leggere, sono molto affidabili e possono essere suddivisi in componenti.Gli svantaggi sono che i calcoli possono essere lenti e lo stile e la sintassi sono completamente diversi dagli altri stili di programmazione comuni.Lo stile di programmazione funzionale è più spesso abbracciato dagli accademici che dai professionisti dell'informatica.

Come suggerisce il nome, le funzioni sono una parte fondamentale di questo paradigma di programmazione.Le funzioni possono essere nidificate all'interno di altre funzioni, chiamate funzioni di ordine superiore, e ogni funzione di ordine superiore può essere suddivisa in funzioni di blocco che sono facili da capire e debug.Esempi di alcune funzioni di ordine superiore sono la mappa e il nido.La mappa della funzione prende una funzione f e l'elenco delle variabili, ad esempio (x, y, z) e fornisce il risultato in un elenco: mappa [f, (x, y, z)] ' (f (x), f(y), f (z)).Nest prende la funzione F, la variabile X e il numero di iterazioni: nido [f, x, 3] ' f (f (f (x))).

La programmazione funzionale pura prende un input e restituisce un output senza mai cambiare lo stato di una variabile.In altre parole, una funzione con lo stesso input darà sempre gli stessi risultati indipendentemente da ciò che è accaduto in precedenza nel programma.Questo si chiama trasparenza referenziale.Poiché le funzioni matematiche sono referenzialmente trasparenti, la programmazione funzionale è intuitiva per molti matematici, ingegneri e scienziati.

La trasparenza referenziale delle funzioni significa che l'ordine di valutazione della funzione non è importante.Pertanto, le funzioni non devono essere valutate fino a quando non sono necessari i loro risultati, che si chiama valutazione pigra.Ciò è in completo contrasto con la programmazione imperativa, in cui un programma inizia con il primo comando e viene eseguito attraverso l'elenco fino all'ultimo comando.La valutazione pigra salta su parti del programma che non seguono logicamente o sono superflui, che ottimizza automaticamente il programma e possono ridurre i tempi di calcolo.

La programmazione funzionale presenta molti vantaggi rispetto ad altri paradigmi di programmazione.Le funzioni con input e output chiari sono facili da leggere e comprendere.Una volta che una funzione viene debug accuratamente, può essere utilizzata in modo affidabile in altre applicazioni.Le macchine multicore possono essere in grado di calcolare le funzioni che vengono valutate in modo indipendente in parallelo, migliorando drasticamente le prestazioni dei programmi.

Sfortunatamente, non tutti i programmi si prestano al calcolo parallelo e i programmi funzionali di calcolo possono essere piuttosto lenti.I programmi funzionali si basano fortemente sulla ricorsione, che è spesso meno efficiente che l'uso di loop tradizionali o metodi di iterazione.In effetti, la programmazione funzionale può essere piuttosto goffa e difficile da imparare poiché non assomiglia ad altri paradigmi più comuni come la programmazione orientata agli oggetti.

Gli accademici tendono a favorire la programmazione funzionale poiché fornisce un modo chiaro e comprensibile per programmare problemi complessi nel mondo reale.Alcune lingue pure sono Haskell ed Erlang.Mathematica è specializzata in matematica simbolica, R è specializzata in statistiche e J è specializzata nell'analisi finanziaria.Linguaggi multiparadigmi come Scala e F# supportano sia la programmazione funzionale che altri stili di programmazione.