Le promesse sono funzionali

4

La programmazione funzionale viene spesso spiegata per concordare con valutazione pigra .

Per quanto ne so valutazione pigra significa che un metodo viene chiamato se il programma di valutazione / browser / ecc. pensa che sia la prossima cosa migliore da fare.

Ho letto di valutazione pigra qui .

Questo mi fa pensare; promises sono progettati per essere eseguiti e, una volta terminato, si fa la cosa migliore. Controllate il flusso.

Ho letto che promises è funzionale qui .

Nel mio piccolo cervello, quelle affermazioni sono gli opposti completi.

Quello mi sta dicendo di valutare una dichiarazione ogni volta che c'è tempo; la programmazione funzionale non ha effetti collaterali quindi non dovrebbe avere importanza.

L'altro mi sta dicendo che dovresti eseguire qualcosa quando c'è tempo, ma dopo di questo usi il comportamento Async. In altre parole, ci si assicura che sia stata eseguita una funzione, quindi si esegue la funzione successiva.

Sono corretto affermando che la pura programmazione funzionale non dovrebbe contenere promesse? E quelle funzioni che contengono promesse sono per definizione non puri?

So che le promesse e i callback possono essere utili, solo cercando di darmi una chiara visione della definizione di programmazione funzionale.

    
posta Randy 21.06.2016 - 14:29
fonte

1 risposta

5

Sono più interessato a rispondere alle domande del tuo post, o piuttosto alla fonte della tua confusione.

Per quanto riguarda la domanda nel titolo: le promesse sono funzionali? sì, possono essere. Vedi questa pagina per le promesse in Haskell, che è il prototipo programmazione funzionale .

La tua confusione riguardo alla natura di effetto collaterale delle promesse è ben meritata. Controlla la pagina collegata qui sopra e dai un'occhiata alle firme di queste funzioni. Si noti il IO ? Questo è il modo di Haskell di dire che la funzione potrebbe avere effetti collaterali.

Affermare che "la programmazione funzionale non ha effetti collaterali" è un po 'aspro e tecnicamente scorretto. Immagina un linguaggio di programmazione a cui non è consentito accedere al tuo disco rigido, ricevere input dalla tastiera o stampare qualsiasi cosa sullo schermo. Dal momento che gli utenti hanno un bisogno definitivo di effetti collaterali a un certo punto e la programmazione funzionale abbraccia solo la purezza delle funzioni, per quanto possibile.

Come già sottolineato @Daenyth, la valutazione pigra e le FP sono cose diverse. Ciò che è veramente confuso in questi giorni è che il termine "programmazione funzionale" è usato per significare molte di queste cose diverse. La valutazione pigra è una di queste, ma anche purezza, GADT, monade, pattern matching, immutabilità e molti altri sono gettati nel mix.

Anche l' articolo di wikipedia su FP è attentamente non che definisce esattamente cosa FP è. Per quanto ne so, l'unica cosa che non puoi togliere dalla programmazione funzionale, e comunque chiamarla programmazione funzionale è il calcolo lambda .

    
risposta data 21.06.2016 - 16:02
fonte

Leggi altre domande sui tag