Questa domanda mi è passata molto spesso in mente e poiché non ho trovato una risposta convincente mi piacerebbe sapere se altri utenti di questo sito hanno pensato anche a questo.
Negli ultimi anni, anche se OOP è ancora il paradigma di programmazione più popolare, la programmazione funzionale sta ricevendo molta attenzione. io ho solo ho usato le lingue OOP per il mio lavoro (C ++ e Java) ma sto cercando di imparare un po ' FP nel mio tempo libero perché lo trovo molto interessante.
Quindi, ho iniziato ad imparare Haskell tre anni fa ea Scala la scorsa estate. Ho intenzione di impara anche SML e Caml e rispolvera la mia (piccola) conoscenza di Scheme. Bene, molti piani (troppo ambiziosi?) Ma spero di trovare il tempo per imparare almeno le basi della FP durante i prossimi anni. Ciò che è importante per me è come funziona la programmazione funzionale e come / se Posso usarlo per alcuni progetti reali. Ho già sviluppato piccoli strumenti in Haskell.
Nonostante il mio strong interesse per la FP, trovo difficile capire perché i costrutti di programmazione funzionale vengono aggiunti a linguaggi come C #, Java, C ++ e così via. Come sviluppatore interessato a FP, lo trovo più naturale usa, ad esempio, Scala o Haskell, invece di aspettare la prossima funzione FP da aggiungere al mio linguaggio non FP preferito. In altre parole, perché dovrei avere solo alcuni FP nel mio originale linguaggio non FP, invece di cercare una lingua che abbia un supporto migliore per FP?
Per esempio, perché dovrei essere interessato ad avere lambda in Java se posso cambiare in Scala dove ho molti più concetti di FP e accesso a tutte le librerie Java Comunque? Allo stesso modo: perché alcuni FP in C # invece di usare F # (per quanto ne so, C # e F # possono lavorare insieme )?
Java è stato progettato per essere OO. Belle. Posso fare OOP in Java (e mi piacerebbe continuare a usare Java in questo modo). Scala è stato progettato per supportare OOP + FP. Bene: posso usare un mix di OOP e FP in Scala. Haskell è stato progettato per FP: posso fare FP in Haskell. Se ho bisogno di sintonizzare le prestazioni di un particolare modulo, posso interfaccia Haskell con alcune routine esterne in C
Ma perché dovrei voler fare OOP con solo alcuni basic FP in Java?
Quindi, il mio punto principale è: perché i linguaggi di programmazione non funzionali vengono estesi con il concetto funzionale alcuni ? Non dovrebbe essere più comodo (interessante, eccitante, produttivo) per programma in un linguaggio che è stato progettato fin dall'inizio a essere funzionale o multi-paradigma? Non diversi paradigmi di programmazione integrare meglio in un linguaggio che è stato progettato per esso rispetto a una lingua in cui un paradigma è stato aggiunto solo più tardi?
La prima spiegazione a cui potrei pensare è quella, dal momento che FP è un nuovo concetto (non è affatto nuovo, ma è nuovo per molti sviluppatori), deve essere introdotto gradualmente. Tuttavia, ricordo il mio passaggio da imperativo a OOP: quando ho iniziato a programmare in C ++ (proveniente da Pascal e C), dovevo davvero farlo ripensare il modo in cui stavo codificando e farlo abbastanza velocemente. Non è stato graduale. Quindi, questa non sembra essere una buona spiegazione per me.
Oppure può essere che molti programmatori non FP non siano realmente interessati capire e utilizzare la programmazione funzionale, ma la trovano praticamente comodo adottare alcuni idiomi FP nel loro linguaggio non FP?
NOTA IMPORTANTE
Nel caso in cui (perché ho visto diverse guerre di lingue su questo sito): Ho menzionato le lingue che conosco meglio, questa domanda non è in alcun modo pensato per avviare confronti tra diverse programmazioni le lingue per decidere quale è migliore / peggiore.
Inoltre, non mi interessa un confronto tra OOP e FP (pro e contro). Il punto che mi interessa è capire perché FP è stato introdotto un po 'alla volta in linguaggi esistenti che non sono stati progettati per questo anche se esistono linguaggi che sono / sono specificamente progettati per supportare FP.