La programmazione funzionale è un paradigma dichiarativo. Uno dei punti di forza di FP è che si evitano gli effetti collaterali. Si dice che per alcuni problemi FP non sia adatto.
Per quali problemi comuni la programmazione funzionale non è adatta?
La programmazione funzionale è un paradigma dichiarativo. Uno dei punti di forza di FP è che si evitano gli effetti collaterali. Si dice che per alcuni problemi FP non sia adatto.
Per quali problemi comuni la programmazione funzionale non è adatta?
Risposte:
Applicazioni di natura molto stateful. I videogiochi sono un buon esempio perché modellano il mondo reale. Ha molto più senso pensare a modificare lo stato del mondo invece di ricostruire dallo stato precedente ogni volta che qualcosa cambia.
Un esempio concreto potrebbe cambiare la salute di un mostro dopo che è stato colpito. È molto più sensato semplicemente modificare la sua salute piuttosto che sostituirla con un mostro completamente nuovo che è lo stesso in tutti i modi tranne che ora ha meno salute. Questo tipo di cambiamenti compongono praticamente tutto in un mondo di gioco e farlo in modo puro e funzionale non è molto intuitivo. Immagino che potrebbero esserci alcune penalità di prestazione significative, almeno se lo stai facendo in un linguaggio puramente funzionale.
(Come nota a margine, alcuni problemi nei giochi sono molto adatti alla programmazione funzionale, come l'intelligenza artificiale. Un linguaggio ibrido funzionale / imperativo si adatterebbe perfettamente a questi casi.)
La programmazione integrata in tempo reale è interamente incentrata sugli effetti collaterali. Interagendo con io, timer, porte seriali e parallele digitali e analogici, tutto ciò che è interessante viene chiamato chiamando funzioni con effetti collaterali.
Direi che la programmazione della GUI non è adatta alla programmazione funzionale. Le GUI sono generalmente molto stateful, ed è molto più facile modellarle / gestirle usando state piuttosto che usare un effetto collaterale gratuito. È certamente possibile usare un linguaggio di programmazione funzionale per le GUI ... ma probabilmente non è una buona idea.
Come indicato in un'altra risposta, i giochi sono spesso più facili da gestire monitorando lo stato e mentre è possibile scrivere un gioco in un linguaggio funzionale, è spesso più facile ed efficiente farlo in un linguaggio "stateful" (ovvero orientato agli oggetti linguaggio).
Applicazioni aziendali basate sui dati. L'interfaccia utente e le semplici operazioni sui dati non richiedono FP.
filter
, reduce
e map
. In alcuni passi sort
, partition
, groupBy
. Dopotutto, il linguaggio di programmazione più utilizzato per scrivere tali applicazioni è Excel, che è un linguaggio funzionale.
Non è possibile eliminare facilmente qualsiasi problema impostato per non adatto alla programmazione funzionale in sé.
Molto dipende dal linguaggio effettivo utilizzato per la programmazione funzionale e dalle sue caratteristiche.
Un esempio è il già citato Erlang per i sistemi embedded in tempo reale.
La pienezza statale non è inoltre un buon criterio contro la programmazione funzionale, ci sono diversi modi di successo implementati nei linguaggi di programmazione funzionale per far fronte a questo.
Gli effetti collaterali sono spesso citati anche contro la programmazione funzionale. Ogni programma che non è totalmente solipsistico ha effetti collaterali. Quindi ogni linguaggio FP del mondo reale ha un modo per affrontarlo, è solo una questione di quanto elegantemente incapsulare gli effetti collaterali del mondo.
Non sono assolutamente necessari effetti collaterali arbitrari come le variabili globali.
Ma ci sono serie di problemi che rendono più facile entrare nella programmazione funzionale perché non distorcono il tuo modo familiare di vedere il problema. Ma una volta che riesci a pensare che funzionale, sempre più insiemi di problemi sono aperti a meno effetti collaterali.
Anche durante la programmazione di C è sempre una buona idea ridurre il più possibile gli effetti collaterali arbitrari come le variabili globali.