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

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