Javascript come linguaggio funzionale

Sto cercando di fare i conti con i concetti di programmazione funzionale.

Ho usato Javascript per molti anni per lo scripting lato client in applicazioni Web e oltre all’uso di prototipi era tutto semplice manipolazione DOM, convalida dell’input, ecc.

Di recente, ho letto spesso che Javascript è una delle lingue che supporta la programmazione funzionale.

Con la mia familiarità e esperienza con Javascript, la mia preferenza è di usarlo per imparare la programmazione funzionale. Mi aspetto che sarei in grado di concentrarmi maggiormente sui principali concetti funzionali e non rimanere impantanato o distratto da una syntax completamente nuova.

Quindi, in sintesi, Javascript è una buona scelta per apprendere concetti di programmazione funzionale? Quali funzionalità in Javascript sono rilevanti / supportano la programmazione funzionale?

JavaScript supporta le funzioni di prima class. Consulta Utilizzare le tecniche di programmazione funzionale per scrivere JavaScript elegante .

L’ordine superiore Javascript è un ottimo modo per familiarizzare con gli aspetti funzionali di javascript. È anche una lettura relativamente breve nel caso in cui desideri bagnarti i piedi senza immergerti in un libro più grande.

Direi che sebbene sia ansible cogliere rapidamente alcuni concetti di programmazione funzionale con JavaScript, l’uso di JavaScript coerentemente come un linguaggio di programmazione funzionale non è una pratica comune. Almeno non ovviamente comune. La maggior parte delle persone non pubblica tutorial che definiscono la programmazione funzionale con JavaScript – l’unica cosa che la marxidad ha indicato è in realtà un esempio abbastanza decente, ma non ne troverai molte. Gli aspetti funzionali non sono spesso evidenti, proprio come quando le persone usano chiusure in JavaScript, ma non sanno che lo stanno facendo.

L’idea di passare due funzioni come argomenti a una terza funzione, e quindi avere il valore di ritorno, è un’esecuzione legata alle prime due funzioni è una tecnica avanzata che appare quasi sempre solo nel nucleo di librerie complete come jQuery . Le funzioni anonime autonome e simili hanno guadagnato terreno, ma non sono ancora utilizzate in modo coerente. La maggior parte delle esercitazioni spesso si focalizza invece sulle funzionalità OO di JavaScript, ad esempio come creare proprietà e metodi, ambito, controllo di accesso e anche come utilizzare la proprietà prototipo dei costruttori. Onestamente, se la programmazione funzionale è ciò che si desidera, sceglierei un linguaggio noto esclusivamente per questa funzionalità.

Non ricordo chi l’abbia detto, ma javascript è stato chiamato “Schema con syntax Algol”. Quindi per imparare Scheme / Lisp, Javascript non è un brutto inizio. Nota che i linguaggi funzionali come il Lisp sono piuttosto diversi dai linguaggi funzionali puri, come Haskell.

Oltre alle “funzioni di prima class” (il significato che le funzioni sono valori, che possono essere assegnati alle variabili), lo scope lessicale è anche una parte inerente di ciò che rende un linguaggio funzionale.

Ordine superiore Javascript e Il piccolo Javascripter è già stato menzionato. Sono entrambi testi eccellenti. Inoltre, la programmazione degli ordini superiori in Javascript può essere un inizio più facile.

Sebbene javascript supporti FP in una certa misura, non lo incoraggia direttamente. Ecco perché esistono progetti come Funzionale di Oliver Steele , per colmare le lacune. Quindi non lo consiglierei per l’apprendimento di FP. Controlla invece F #.

Consiglierei di leggere The Little Schemer , che è un libro abbastanza sottile sulla ricorsione ed è una buona introduzione allo stile funzionale. Sebbene sia focalizzato su Scheme, può essere facilmente applicato a JavaScript, vedere http://javascript.crockford.com/little.html . L’ho trovato davvero utile nel mio sviluppo di javascript, anche se diventa piuttosto complicato verso la fine.

Javascript è un linguaggio multi-paradigma. Se il tuo objective è imparare concetti linguistici funzionali, prova a iniziare con un linguaggio funzionale puro come OCaml o Haskell .

Inoltre, Eloquent JavaScript: capitolo sulla programmazione funzionale .