Immutabilità

Non ci sono variabili nella programmazione funzionale.
I valori immagazzinati sono comunque chiamati variabili, per un discorso di continuità, ma di fatto si tratta di costanti. Una volta assegnato un valore ad una variabile esso è per sempre.
In realtà il problema è molto minore anche perché le variabili sono quasi tutte locali e hanno quasi sempre una vita estremamente corta.
Ma come possiamo programmare senza variabili? Quando i linguaggi funzionali hanno bisogno di modificare un valore semplicemente ne fanno una copia, lasciando quindi intatto il valore nella variabile originale e restituendoci una copia modificata.
Altro punto cruciale nella programmazione funzionale è la mancanza di loop. Non esiste niente come for, while, do, repeat eccetera.
Questo non significa che non possiamo in assoluto fare dei loop nella programmazione funzionale, significa solo che non ci sono costrutti di linguaggio che ci permettano di farlo. Questo per un semplice motivo, tutti i cicli dei linguaggi imperativi si basano sul modificare ripetutamente il valore di una o più variabili e questo sarebbe in contrasto con l’immutabilità.
Scommetto che avete già intuito la soluzione al nostro problema dei loop. Basta usare un algoritmo ricorsivo.
Questo perché, come è facile capire, gli algoritmi ricorsivi non modificano il valore delle variabili ma effettuano i calcoli sulle copie di valori che vengono passati di chiamata in chiamata.
Lo so, inizialmente è piuttosto sconcertante, ma si tratta prevalentemente della paura di uscire dalla nostra comfort zone e avventurarci nell’ignoto. Mano a mano che ne farete uso scoprirete di apprezzare sempre di più le chiamate ricorsive.
L’immutabilità garantisce tantissimi vantaggi, pensate ad esempio a cosa succede quando si programma un software multi-threaded che fa chiamate a funzioni con side-effect. La chiamata di una funzione in un thread potrebbe cambiare il valore su cui una funzione di un’altro thread sta per fare dei calcoli, causando un errore imprevisto, intermittente e difficilissimo da debuggare.

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>