Cos'è la programmazione funzionale? Tutorial con esempio
Che cos'è la programmazione funzionale?
La programmazione funzionale (chiamata anche FP) è un modo di pensare alla costruzione del software creando funzioni pure. Evita concetti di stato condiviso e dati mutabili osservati nella programmazione orientata agli oggetti.
I linguaggi funzionali si concentrano su espressioni e dichiarazioni piuttosto che sull'esecuzione di istruzioni. Pertanto, a differenza di altre procedure che dipendono da uno stato locale o globale, il valore restituito in FP dipende solo dagli argomenti passati alla funzione.
Caratteristiche della Programmazione Funzionale
- Il metodo di programmazione funzionale si concentra sui risultati, non sul processo
- L'enfasi è su ciò che deve essere calcolato
- I dati sono immutabili
- Programmazione funzionale Scomporre il problema in 'funzioni
- Si basa sul concetto di funzioni matematiche che utilizza espressioni condizionali e ricorsione per eseguire il calcolo
- Non supporta l'iterazione come istruzioni di ciclo e istruzioni condizionali come If-Else
Storia della programmazione funzionale
- Il fondamento della Programmazione Funzionale è il Lambda Calcolo. È stato sviluppato negli anni '1930 per l'applicazione funzionale, la definizione e la ricorsione
- LISP è stato il primo linguaggio di programmazione funzionale. McCarthy lo progettò nel 1960
- Alla fine degli anni '70 i ricercatori dell'Università di Edimburgo definirono il ML(Meta Language)
- All'inizio degli anni '80 il linguaggio Hope aggiunge tipi di dati algebrici per la ricorsione e il ragionamento equazionale
- Nel 2004 Innovazione del linguaggio funzionale 'Scala.'
Linguaggi di programmazione funzionale
L'obiettivo di qualsiasi linguaggio FP è imitare le funzioni matematiche. Tuttavia, il processo di calcolo di base è diverso nella programmazione funzionale.
Ecco alcuni dei linguaggi di programmazione funzionale più importanti:
- Haskell
- SML
- Clojure
- Scala
- Erlang
- Pulizia
- F#
- Lisp/schema ML/OCaml
- XSLT
- SQL
- Mathematica
Terminologia di base della programmazione funzionale e Concepts
Dati immutabili
Dati immutabili significa che dovresti essere facilmente in grado di creare strutture dati invece di modificare quelle già esistenti.
Trasparenza referenziale
I programmi funzionali dovrebbero eseguire operazioni proprio come se fossero per la prima volta. Quindi saprai cosa può essere successo o meno durante l'esecuzione del programma e i suoi effetti collaterali. Nel termine FP si chiama Trasparenza referenziale.
modularità
Il design modulare aumenta la produttività. I piccoli moduli possono essere codificati rapidamente e hanno maggiori possibilità di riutilizzo, il che porta sicuramente a uno sviluppo più rapido dei programmi. Oltre a ciò, i moduli possono essere testati separatamente, il che aiuta a ridurre il tempo dedicato ai test unitari e al debug.
manutenibilità
Manutenibilità è un termine semplice che significa che la programmazione FP è più facile da mantenere poiché non è necessario preoccuparsi di modificare accidentalmente qualcosa al di fuori della funzione specificata.
Funzione di prima classe
'Funzione di prima classe' è una definizione attribuita a entità del linguaggio di programmazione che non hanno restrizioni sul loro utilizzo. Pertanto, le funzioni di prima classe possono apparire ovunque nel programma.
Chiusura
La chiusura è una funzione interna che può accedere alle variabili della funzione genitore, anche dopo che la funzione genitore è stata eseguita.
Funzioni di ordine superiore
Le funzioni di ordine superiore accettano altre funzioni come argomenti o le restituiscono come risultati.
Le funzioni di ordine superiore consentono applicazioni parziali o currying. Questa tecnica applica una funzione ai suoi argomenti uno alla volta, poiché ogni applicazione restituisce una nuova funzione che accetta l'argomento successivo.
Pura funzione
Una "funzione pura" è una funzione i cui input sono dichiarati come input e nessuno di essi deve essere nascosto. Anche gli output vengono dichiarati come output.
Le funzioni pure agiscono sui loro parametri. Non è efficiente se non restituisce nulla. Inoltre, offre lo stesso output per i parametri specificati
Esempio:
Function Pure(a,b) { return a+b; }
Funzioni impure
L'impuro funziona esattamente all'opposto del puro. Hanno input o output nascosti; si chiama impuro. Le funzioni impure non possono essere utilizzate o testate isolatamente poiché hanno dipendenze.
Esempio
int z; function notPure(){ z = z+10; }
Composizione delle funzioni
La composizione delle funzioni consiste nel combinare 2 o più funzioni per crearne una nuova.
Stati condivisi
Gli stati condivisi sono un concetto importante nella programmazione OOP. Fondamentalmente, aggiunge proprietà agli oggetti. Ad esempio, se un disco rigido è un oggetto, la capacità di archiviazione e la dimensione del disco possono essere aggiunte come proprietà.
Effetti Collaterali
Gli effetti collaterali sono tutti i cambiamenti di stato che si verificano al di fuori di una funzione chiamata. L'obiettivo principale di qualsiasi linguaggio di programmazione FP è ridurre al minimo gli effetti collaterali, separandoli dal resto del codice software. Nella programmazione FP è fondamentale eliminare gli effetti collaterali dal resto della logica di programmazione.
I vantaggi della programmazione funzionale
- Consente di evitare problemi ed errori confusi nel codice
- Più facile testare ed eseguire test unitari ed eseguire il debug del codice FP.
- Elaborazione parallela e concorrenza
- Distribuzione del codice hot e tolleranza agli errori
- Offre una migliore modularità con un codice più breve
- Aumento della produttività dello sviluppatore
- Supporta funzioni nidificate
- Costrutti funzionali come Lazy Map & Lists, ecc.
- Consente un utilizzo efficace del Lambda Calcolo
Limitazioni della programmazione funzionale
- Il paradigma di programmazione funzionale non è facile, quindi è difficile da capire per il principiante
- Difficile da mantenere poiché molti oggetti si evolvono durante la codifica
- Ha bisogno di molte prese in giro e di un'ampia configurazione ambientale
- Il riutilizzo è molto complicato e necessita di un costante refactoring
- Gli oggetti potrebbero non rappresentare correttamente il problema
Programmazione funzionale e programmazione orientata agli oggetti
Programmazione Funzionale | OOP |
---|---|
FP utilizza dati immutabili. | L'OOP utilizza dati mutabili. |
Segue il modello basato sulla programmazione dichiarativa. | Segue il modello di programmazione imperativa. |
Ciò su cui si concentra è: “Cosa stai facendo. nel programma." | Ciò che si concentra è su “Come stai programmando”. |
Supporta la programmazione parallela. | Nessun supporto per la programmazione parallela. |
Le sue funzioni non hanno effetti collaterali. | Il metodo può produrre molti effetti collaterali. |
Il controllo del flusso viene eseguito utilizzando chiamate di funzione e chiamate di funzione con ricorsione. | Il processo di controllo del flusso viene condotto utilizzando cicli e istruzioni condizionali. |
L'ordine di esecuzione delle dichiarazioni non è molto importante. | L'ordine di esecuzione delle dichiarazioni è importante. |
Supporta sia "Astrazione sui dati" che "Astrazione sul comportamento". | Supporta solo "Astrazione su dati". |
Conclusione
- La programmazione funzionale o FP è un modo di pensare alla costruzione del software basato su alcuni principi fondamentali
- I concetti di programmazione funzionale si concentrano sui risultati, non sul processo
- L'obiettivo di qualsiasi linguaggio FP è imitare le funzioni matematiche
- Alcuni dei linguaggi di programmazione funzionale più importanti: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- Una "funzione pura" è una funzione i cui input sono dichiarati come input e nessuno di essi deve essere nascosto. Anche gli output vengono dichiarati come output.
- Dati immutabili significa che dovresti essere facilmente in grado di creare strutture dati invece di modificare quelle già esistenti
- Consente di evitare problemi ed errori confusi nel codice
- Il codice funzionale non è facile, quindi è difficile da capire per il principiante
- FP utilizza dati immutabili mentre OOP utilizza dati mutabili