Purezza

Quando parliamo di purezza, negli elementi fondamentali della programmazione funzionale, ci riferiamo alle funzioni pure.
Si tratta di funzioni che agiscono solamente sui parametri che gli vengono passati come input. Questo implica, ad esempio, che una funzione pure senza parametri debba restituire sempre un valore costante. Questo perché, potendo agire solamente sui parametri passati alla funzione, quindi non su variabili globali o di altro tipo, non avendo parametri in input non può che restituire sempre lo stesso valore.
Questa caratteristica porta al determinismo, che vedremo più nel dettaglio più avanti.
Le funzioni non pure sono tutte quelle funzioni che includono nei propri calcoli variabili non locali, quindi variabili esistenti al di fuori della funzione. Questo implica un comportamento non determinabile a priori perché il risultato restituito dalla funzione dipenderà da una variabile il cui valore potrebbe essere modificato esternamente.
Di fatto la conseguenza principale è che potremmo chiamare la funzione più volte con gli stessi parametri ottenendo però risultati diversi. Questo può essere la causa di alcuni dei bug più insidiosi e difficili da scovare.
Un’altra categoria di funzioni non pure è quella che produce side-effects. Vale a dire che non si limita a ricevere dei parametri in input e restituire un valore come output, ma modifica durante la propria esecuzione, il valore delle variabili passate come parametri o di altri elementi del programma.
Per quanto sia impossibile evitare del tutto le funzioni con side-effects, fanno infatti parte di questa categoria tutte le funzioni di I/O, di scrittura su database o via web, lo scopo della programmazione funzionale è segregarle ed utilizzarle solamente il minimo indispensabile. Questo perché sono spesso fonte di bug veri e proprio se non di errori logici dell’algoritmo.
Di fatto una delle ragioni per la quale i programmi funzionali sono tra i più sicuri, robusti ed efficienti è che i programmatori sono solitamente tanto disciplinati e rigorosi quanto il linguaggio che usano li obbliga ad essere.
Il problema dei linguaggi imperativi è che le funzioni con side-effects sono ovunque e quando c’è un bug andare a capire quale dei tanti effetti collaterali delle migliaia di chiamate di funzione del programma l’ha generato potrebbe essere molto complesso.

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>