Il differenza fondamentale tra la programmazione funzionale e la programmazione imperativa è che il la programmazione funzionale considera i calcoli come funzioni matematiche ed evita il cambiamento di stato e dati mutabili mentre la programmazione imperativa utilizza le istruzioni che modificano lo stato dei programmi.
Un paradigma di programmazione fornisce uno stile di costruzione della struttura e degli elementi di un programma per computer. I paradigmi di programmazione aiutano a classificare i linguaggi di programmazione in base alle loro caratteristiche. Un linguaggio di programmazione potrebbe influenzare più paradigmi. Nel paradigma orientato agli oggetti, il programma è strutturato usando oggetti, e gli oggetti passano messaggi usando metodi. La programmazione logica può esprimere il calcolo esclusivamente in termini di logica matematica. Altri due paradigmi di programmazione sono la programmazione funzionale e la programmazione imperativa. La programmazione funzionale consente di esprimere calcoli come la valutazione delle funzioni matematiche. La programmazione imperativa fornisce affermazioni che modificano esplicitamente lo stato della memoria. Questo articolo discute la differenza tra programmazione funzionale e programmazione imperativa.
1. Panoramica e differenza chiave
2. Che cos'è la programmazione funzionale
3. Cos'è la programmazione imperativa
4. Somiglianze tra programmazione funzionale e programmazione imperativa
5. Confronto affiancato - Programmazione funzionale vs Programmazione imperativa in forma tabulare
6. Sommario
La programmazione funzionale si basa sulla matematica. Il principio chiave alla base della programmazione funzionale è che tutto il calcolo è considerato come una combinazione di funzioni matematiche separate. Una funzione matematica mappa gli input in output. Supponiamo che esista una funzione chiamata f (x) = x * x. Il valore x 1 è mappato all'uscita 1. Il valore x 2 è mappato all'uscita 4. Il valore x 3 è mappato all'uscita 9 e così via.
Figura 01: Esempio di linguaggio di programmazione funzionale - Haskell
Nella programmazione funzionale, vengono considerati i modelli. I linguaggi di programmazione funzionale Haskell utilizza il metodo seguente per trovare la somma dei numeri.
La funzione somma ha valori interi e il risultato sarà anche un numero intero. Può essere scritto come somma: [int] -> int. La sommatoria può essere eseguita seguendo i seguenti schemi.
sum [n] = n, la somma di un numero è il numero stesso.
Se c'è una lista di numeri, può essere scritta come segue. La n rappresenta il primo numero e ns rappresenta gli altri numeri
sum (n, ns) = n + somma ns.
I modelli sopra possono essere applicati per trovare la sommatoria di tre numeri che sono 3,4,5.
3 + somma [4,5]
3 + (4 + somma [5])
3+ 4 + 5 = 12
Si dice che una funzione o un'espressione hanno effetti collaterali se modifica uno stato al di fuori del suo ambito o ha un'interazione osservabile con le sue funzioni di chiamata oltre al valore di ritorno. La programmazione funzionale minimizza questi effetti collaterali. Le modifiche dello stato non dipendono dagli input della funzione. È utile quando si capisce il comportamento del programma. Uno svantaggio della programmazione funzionale è che l'apprendimento della programmazione funzionale è più difficile rispetto alla programmazione imperativa.
La programmazione imperativa è un paradigma di programmazione che utilizza le istruzioni che modificano lo stato di un programma. Si concentra sulla descrizione di come funziona un programma. Linguaggi di programmazione come Java, C e C # sono linguaggi di programmazione imperativi. Fornisce una procedura passo passo su cosa fare. I linguaggi di programmazione imperativi contengono strutture come se, altrimenti, mentre, per cicli, classi, oggetti e funzioni.
Figura 02: Esempio di linguaggio di programmazione imperativo - Java
La somma di dieci numeri può essere trovata in Java come segue. In ogni iterazione, il valore i viene aggiunto alla somma e assegnato alla variabile sum. In ogni iterazione, il valore della somma continua ad aggiungere alla somma calcolata in precedenza.
int sum = 0;
per (int i = 0; i< =10; i++)
somma = somma + i;
La programmazione imperativa è facile da imparare, capire e fare il debug. È facile trovare lo stato del programma a causa dell'utilizzo di variabili di stato. Alcuni inconvenienti sono che può rendere il codice lungo e può anche ridurre al minimo la scalabilità.
Programmazione funzionale vs imperativa | |
La programmazione funzionale è un paradigma di programmazione che considera il calcolo come la valutazione di funzioni matematiche ed evita il cambiamento di stato e dati mutabili. | La programmazione imperativa è un paradigma di programmazione che usa le istruzioni, che modificano lo stato di un programma. |
strutture | |
La programmazione funzionale contiene chiamate di funzione e funzioni di ordine superiore. | Programmazione imperativa contiene se, altrimenti, mentre, per cicli, funzioni, classi e oggetti. |
Linguaggi di programmazione | |
Scala, Haskell e Lisp sono linguaggi di programmazione funzionali. | C, C ++, Java sono linguaggi di programmazione imperativi. |
Messa a fuoco | |
La programmazione funzionale si concentra sul risultato finale. | Programmazione imperativa si concentra sulla descrizione di come funziona un programma. |
Semplicità | |
La programmazione funzionale è difficile. | La programmazione imperativa è più facile. |
Un paradigma di programmazione fornisce uno stile di costruzione della struttura e degli elementi di un programma per computer. La programmazione funzionale e la programmazione imperativa sono due di queste. La differenza tra la programmazione funzionale e la programmazione imperativa è che la programmazione funzionale considera i calcoli come funzioni matematiche ed evita il cambiamento di stato e dati mutabili mentre la programmazione imperativa utilizza le istruzioni che modificano lo stato dei programmi.
1. "Programmazione imperativa". Wikipedia, Wikimedia Foundation, 28 marzo 2018. Disponibile qui
2. "Programmazione funzionale". Wikipedia, Wikimedia Foundation, 28 marzo 2018. Disponibile qui
3.Computerphile. YouTube, YouTube, 30 agosto 2013. Disponibile qui
1.'Haskell Logo'By Haskell1965 - Opera propria, (CC BY-SA 3.0) attraverso Commons Wikimedia
2. '14485179234' da Linux Screenshots (CC BY 2.0) attraverso Flickr