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.

Tutorial Arduino – Programmazione web server

Arduino Ethernet Shield

USARE ARDUINO COME SERVER DI UNA PAGINA WEB

Ciao a tutti,

in questo tutorial proseguiamo la serie sulla programmazione arduino, nello specifico parliamo di come trasformare una scheda arduino in un web server per la visualizzazione di una semplice pagina internet.

(altro…)

Come svuotare un compartimento allagato dall’acqua con arduino

Buongiorno a tutti,

sono a presentarvi oggi un progetto realizzato da uno dei ragazzi che mi segue, il progetto che simula, grazie all’utilizzo di arduino e di un elettrovalvola, un impianto atto a rilevare una falla e in grado di attivare una pompa per svuotare il compartimento compromesso, è stato realizzato da Davide Calvo come tesina di maturità.

(altro…)