Domanda

Quali pensi che siano i vantaggi della programmazione funzionale? E come si applicano ai programmatori oggi?

Quali sono le maggiori differenze tra programmazione funzionale e OOP?

È stato utile?

Soluzione

Lo stile della programmazione funzionale è descrivere ciò che vuoi, piuttosto che come ottenerlo. vale a dire: invece di creare un for-loop con una variabile iteratore e marciare attraverso un array facendo qualcosa per ogni cella, diresti l'equivalente di " questa etichetta si riferisce a una versione di questo array in cui questa funzione è stata eseguita su tutti gli elementi. "

La programmazione funzionale sposta più idee di programmazione di base nel compilatore, idee come la comprensione dell'elenco e la memorizzazione nella cache.

Il più grande vantaggio della programmazione funzionale è la brevità, perché il codice può essere più conciso. Un programma funzionale non crea una variabile iteratore come centro di un ciclo, quindi questo e altri tipi di overhead vengono eliminati dal tuo codice.

L'altro vantaggio principale è la concorrenza, che è più facile da fare con la programmazione funzionale perché il compilatore si occupa della maggior parte delle operazioni che richiedevano l'impostazione manuale delle variabili di stato (come l'iteratore in un ciclo).

Alcuni vantaggi in termini di prestazioni possono essere visti anche nel contesto di un singolo processore, a seconda della modalità di scrittura del programma, poiché la maggior parte dei linguaggi e delle estensioni funzionali supporta la valutazione lenta. In Haskell puoi dire "questa etichetta rappresenta una matrice contenente tutti i numeri pari". Un array di questo tipo è infinitamente grande, ma puoi chiedere il 100.000 ° elemento di quell'array in qualsiasi momento senza dover sapere, al momento dell'inizializzazione dell'array, qual è il valore più grande di cui avrai bisogno. Il valore verrà calcolato solo quando necessario e non oltre.

Altri suggerimenti

Il più grande vantaggio è che non è quello a cui sei abituato. Scegli una lingua come Scheme e impara a risolverne i problemi, e diventerai un programmatore migliore nelle lingue che già conosci. È come imparare un secondo linguaggio umano. Supponi che gli altri siano fondamentalmente una variazione da soli perché non hai nulla con cui confrontarlo. L'esposizione ad altri, particolari che non sono collegati a ciò che già sai, è istruttiva.

Perché è importante la programmazione funzionale
http://www.cs.kent.ac.uk /people/staff/dat/miranda/whyfp90.pdf

  

Un buon punto di partenza sarebbe quindi quello di cercare di capire alcune cose che non sono possibili nelle lingue imperative ma possibili nelle lingue funzionali.

Se stai parlando della calcolabilità, ovviamente non c'è nulla che sia possibile nella programmazione funzionale ma non imperativa (o viceversa).

Il punto dei diversi paradigmi di programmazione non è quello di rendere possibili cose che prima non erano possibili, ma di rendere le cose facili che prima erano difficili.

La programmazione funzionale mira a consentire di scrivere più facilmente programmi concisi, privi di bug e parallelizzabili.

Non deve essere l'uno o l'altro: usare un linguaggio come C # 3.0 ti consente di mescolare i migliori elementi di ciascuno. OO può essere utilizzato per la struttura su larga scala a livello di classe e superiore, Stile funzionale per la struttura su piccola scala a livello di metodo.

L'uso dello stile funzionale consente di scrivere un codice che dichiari chiaramente il suo intento, senza essere confuso con le istruzioni del flusso di controllo, ecc. A causa dei principi come la programmazione libera degli effetti collaterali, è molto più facile ragionare sul codice e verificane la correttezza.

Penso che l'esempio più pratico della necessità di una programmazione funzionale sia la concorrenza: i programmi funzionali sono naturalmente sicuri per i thread e, vista l'ascesa dell'hardware multi-core, è della massima importanza.

La programmazione funzionale aumenta anche la modularità - spesso puoi vedere metodi / funzioni imperativi che sono troppo lunghi - non vedrai quasi mai una funzione più di un paio di righe. E poiché tutto è disaccoppiato, la riutilizzabilità è molto migliorata e i test unitari sono molto semplici.

Una volta che il programma cresce, il numero di comandi nel nostro vocabolario diventa troppo alto, rendendolo molto difficile da usare. È qui che la programmazione orientata agli oggetti ci semplifica la vita, perché ci consente di organizzare i nostri comandi in modo migliore. Siamo in grado di associare tutti i comandi che coinvolgono il cliente con alcune entità cliente (una classe), il che rende la descrizione molto più chiara. Tuttavia, il programma è ancora una sequenza di comandi che specifica come dovrebbe procedere.

La programmazione funzionale offre un modo completamente diverso di estendere il vocabolario. Non limitato all'aggiunta di nuovi comandi primitivi; possiamo anche aggiungere nuove strutture di controllo & primitive che specificano come possiamo mettere insieme i comandi per creare un programma. Nei linguaggi imperativi, siamo stati in grado di comporre i comandi in una sequenza o usando un numero limitato di costrutti incorporati come i loop, ma se guardi i programmi tipici, vedrai ancora molte strutture ricorrenti; modi comuni di combinare i comandi

Non pensare alla programmazione funzionale in termini di un "bisogno". Invece, pensalo come un'altra tecnica di programmazione che ti aprirà la mente proprio come OOP, modelli, linguaggio assembly, ecc. Potrebbero aver cambiato completamente il tuo modo di pensare quando (se) li hai imparati. In definitiva, l'apprendimento della programmazione funzionale ti renderà un programmatore migliore.

Se non conosci già la programmazione funzionale, l'apprendimento ti offre altri modi per risolvere i problemi.

FP è una semplice generalizzazione che promuove le funzioni ai valori di prima classe mentre OOP è per la strutturazione su larga scala del codice. Esistono tuttavia alcune sovrapposizioni in cui i modelli di progettazione OOP possono essere rappresentati direttamente e in modo molto più succinto usando funzioni di prima classe.

Molte lingue forniscono sia FP che OOP, inclusi OCaml, C # 3.0 e F #.

Saluti, Jon Harrop.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top