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, molto affidabili e possono essere suddivisi in componenti. Gli svantaggi sono che i calcoli possono essere lenti e che 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 ciascuna funzione di ordine superiore può essere suddivisa in funzioni predefinite facilmente comprensibili ed eseguibili. Esempi di alcune funzioni di ordine superiore sono Mappa e Nest. La funzione Mappa accetta una funzione F e l'elenco di 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 accetta la funzione F, la variabile xe il numero di iterazioni: Nest [F, x, 3] = F (F (F (x))).
La pura programmazione funzionale accetta 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 delle funzioni 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 scorre l'elenco fino all'ultimo comando. La valutazione pigra salta parti del programma che non seguono logicamente o sono superflue, il che ottimizza automaticamente il programma e può ridurre i tempi di elaborazione.
La programmazione funzionale ha molti vantaggi rispetto ad altri paradigmi di programmazione. Le funzioni con ingressi e uscite chiari sono facili da leggere e comprendere. Una volta eseguito il debug completo di una funzione, può essere utilizzata in modo affidabile in altre applicazioni. Le macchine multicore possono essere in grado di calcolare 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 rispetto all'utilizzo 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é forniscono un modo chiaro e comprensibile per programmare complessi problemi del mondo reale. Alcune lingue pure sono Haskell ed Erlang. Mathematica è specializzata in matematica simbolica, R è specializzata in statistica e J è specializzata in analisi finanziaria. Linguaggi multiparadigmi come Scala e F # supportano sia la programmazione funzionale che altri stili di programmazione.