La programmazione funzionale è una strana bestia per me. Ho imparato F # e Haskell, ho scritto alcuni semplici programmi e mi piace usarli, ma non ho mai avuto il "lampo di rivelazione" di cui alcune persone parlano. Ma lentamente, ho notato che sempre più stavo scrivendo un codice che doveva essere immutabile, suddividendo i compiti in funzioni più piccole e cercando di utilizzare i delegati molto di più. È una cosa che, se ti piace, si insinua nel tuo lavoro perché il valore di quelle tecniche è evidente.
Ora, più praticamente per l'allenamento:
Trovo che due concetti fanno davvero clic su Programmazione funzionale come stile per me.
In primo luogo, lo stile FP si basa sulla struttura dei dati, non sulla composizione come in OOP. Ho guardato qualcosa come List in C # come un trucco intelligente per generare liste di caratteri sicuri, qualcosa che ha composto il tipo (stringa) nell'altro tipo (elenco). Dopo aver appreso FP, guardo i generici più come i Monad ora. List è una forma strutturata che il codice può assumere e decora le stringhe.
In secondo luogo, e forse più utile ai programmatori C # / ASP, è l'idea che FP funzioni sulla ricorsione e sulla ripetizione, mentre l'OOP lavora su mutabilità e loop. Tendo a pensare al ciclo di vita della pagina ASP come a una specie di FP ora: ogni richiesta viene elaborata da zero per l'intero ciclo di vita, quindi l'intera pagina è, in effetti, un grande programma che ricorre lentamente. Se riesci a restringere questa nozione, hai un'idea migliore di come un programma imperativo può essere strutturato attorno a loop di funzioni che contengono dati, operano su di essi e restituiscono nuovi dati invece di modificare quelli vecchi.
L'ostacolo più difficile, almeno per me, da superare con questo approccio è che sprofondare nella sensazione di sprecare tonnellate di risorse quando si usano oggetti mutabili farebbe risparmiare una tonnellata di memoria. In GC ci fidiamo e ho solo dovuto imparare a lasciare andare i problemi di rendimento finché non ho visto il programma girare e verificare se ce ne fossero, e in tal caso utilizzare un profiler per vedere esattamente dove si trovavano i problemi.