Cambia il mio modo di pensare in preparazione alla programmazione funzionale


9

Quando si passa a uno stile funzionale di programmazione dopo essere venuto da procedurale e OOP, quali cose ho bisogno di sapere in anticipo su "questo nuovo modo di pensare"?

Come ti prepari per le immersioni nel mondo FP e come farlo per la prima volta?

Quali sono le basi per imparare e chiarire per prime?


2
Questo è troppo generale, imho. Inizia a leggere! La maggior parte dei libri e manuali sulla programmazione funzionale oggigiorno iniziano con le risposte alla tua domanda.
devmiles.com

Provalo quindi pubblica una domanda se rimani bloccato su qualcosa
Tom Squires,

@Vladimir Volodin: Sarebbe bello ma non è obbligatorio per ogni libro. Puoi consigliarne di buoni (preferibilmente agnostici)?
JohnDoDo,

Non devi immergerti . Puoi provare l'espressione lambda in un linguaggio OOP come c # per facilitare il passaggio da OOP a FP.
TomCaps

4
Penso che tu l'abbia al contrario. Prova la programmazione funzionale e il tuo modo di pensare cambierà.
Kevin Cline,

Risposte:



6

Avrai bisogno del pensiero dichiarativo invece del modo procedurale "prima fai questo, poi fai questo, poi fai questo ..." per risolvere i problemi. Comprendere la ricorsione potrebbe essere un buon punto di partenza, in quanto è una sorta di punto debole tra pensiero procedurale e pensiero dichiarativo.


4

Hai messo il carrello davanti al cavallo. Non è necessario prepararsi. Basta scegliere una lingua che sembra interessante, trovare un po 'di documentazione e provarla. Se rimani bloccato, fermati e cerca una risposta. Man mano che avanzi, il tuo modo di pensare cambierà.


3

FP si basa sul calcolo lamdba. Devi saperlo. È un buon punto di partenza. Le funzioni sono tutto. Non esiste un concetto di stato (sebbene sia possibile simularlo a un livello superiore).

In OOP,

a = 1 a = a + 1

è accettato. Non così in FP. Non puoi semplicemente assegnare alla variabile un altro valore. Se vuoi imparare FP a lungo termine, impara Haskell. È la versione più pura di FP in circolazione ed è anche abbastanza complicata (ho appena iniziato a impararla) ma vale comunque la pena impararla.

Un'introduzione alla programmazione funzionale offre una panoramica di alto livello su cosa sia FP.

Due avvertimenti però

  1. Se vuoi imparare FP per i lavori, allora non ci sono troppi posti vacanti là fuori. Procedural e OOP continuano a governare il mercato del lavoro. Ma FP può aiutarti molto nell'esplorazione di nuovi modi di risolvere un problema.
  2. I compilatori di FP non sono incredibilmente veloci. Poiché FP è più interessato a risolvere il problema, non ci si può aspettare la velocità C. Ma puoi comunque impartire istruzioni al compilatore (in Haskell) per accelerare il processo di esecuzione. Il compromesso è che ti dedichi molto tempo a concentrarti sul programma in corso anziché sugli errori di lotta antincendio.

8
"FP si basa sul calcolo lamdba. Devi saperlo." No, non lo fai. Conoscere il calcolo lambda non è necessario per comprendere la programmazione funzionale più che conoscere le macchine di Turing (o assemblaggio) è necessario per comprendere la programmazione imperativa.
sepp2k,

@ sepp2k Per ottenere buoni risultati in FP con un obiettivo a lungo termine, credo sinceramente che sia necessario imparare il calcolo lambda. Puoi impararlo senza il calcolo lambda ma impararlo ti renderebbe migliore a FP.
Ubermensch,

2
FP ha dichiarato con certezza che proprio quello stato è di solito immutabile, inoltre non sono sicuro di essere d'accordo con l'affermazione che i compilatori sono lenti
jk.

@jk. Sicuramente, hanno lo stato ma non nel modo OO (gli stati possono essere inclusi nelle funzioni o come schemi di corrispondenza e in modi più sottili). E uno stato immutabile significa che hai un solo stato. Ecco perché una funzione dovrebbe sempre restituire lo stesso valore. Per quanto riguarda i compilatori, non credo che possano corrispondere a C / C ++ in termini di pura velocità poiché il compilatore si occupa delle fasi necessarie per calcolare il risultato invece di noi specificando l'ordine. FP ha il suo più grande vantaggio nella riduzione dei costi di sviluppo e dell'elaborazione parallela piuttosto che nella pura velocità della CPU.
Ubermensch,

3

Faccio del mio meglio per ricordare il seguente mantra:

Data in -> Transform Data -> Data out

o

TransformData (Data In) -> Data Out


1
Dovrebbe essere TransformData (DataIn) -> DataOut
Ubermensch

:) come una matrice "Dati in ingresso, Trasforma dati, Dati in uscita" è più facile dire "Trasforma dati, parentesi aperta, Dati in entrata, parentesi chiusa, Dati in uscita" Sto solo scherzando Sono d'accordo con te.
Darknight,

È solo un amico amico commento. Grazie per la risposta.
Ubermensch,

Lo so, stavo solo scherzando con te, senza offesa, infatti penso che aggiornerò il mio matra.
Darknight,

Amico, il tuo set di abilità è piuttosto grande.
Ubermensch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.