Функціональне програмування є для мене дивним звіром. Я дізнався F # і Haskell, написав кілька простих програм і люблю їх використовувати, але ніколи не мав "спалаху одкровення", про який говорять деякі. Але потихеньку я помічав, що все більше і більше я пишу код, який мав бути незмінним, розбиваючи завдання на більше, менші функції та намагаючись набагато більше використовувати делегатів. Справа в тому, що, якщо вам це подобається, забирається у вашу роботу, оскільки цінність цих прийомів само собою зрозуміла.
Тепер, більш практично для тренінгу: я вважаю, що два поняття дійсно натискають функціональне програмування як стиль для мене.
По-перше, стиль FP заснований на структурі даних, а не на композиції, як в OOP. Я розглядав щось на зразок List у C # як розумний трюк для створення безпечних для списку типів - те, що складало тип (рядок) в інший тип (список). Вивчивши FP, я дивлюся на дженерики більше схожих на Monads. Список - це структурована форма, яку може приймати код, і вона прикрашає рядки.
По-друге, і, можливо, більш корисно для програмістів на C # / ASP - це ідея, що FP працює на рекурсії та повторення, тоді як OOP працює на мутаційності та циклічності. Я схильний вважати життєвий цикл сторінки ASP як своєрідний FP зараз: кожен запит обробляється з нуля протягом усього життєвого циклу, тому вся сторінка, по суті, є однією великою повільно повторюваною програмою. Якщо ви можете звузити це поняття, ви отримаєте краще уявлення про те, як імперативна програма може бути структурована навколо циклів функцій, які беруть дані, працюють над ними та повертають нові дані замість зміни старих.
Найбільш хитра перешкода, принаймні для мене, подолати цей підхід - це те, що відчуття, що ти витрачаєш тонни ресурсів при використанні змінних предметів, заощадить тону пам'яті. У GC ми довіряємо, і я просто повинен був навчитися відмовлятися від проблем щодо продуктивності, поки я насправді не побачив, як програма запускається і не перевіряється, чи існували такі, і якщо так, використовувати профілер, щоб точно побачити проблеми.