Тому що всі ці переваги - це і недоліки.
Програми без громадянства; Побічних ефектів немає
Програми в реальному світі стосуються побічних ефектів та мутації. Коли користувач натискає кнопку, це тому, що вони хочуть, щоб щось сталося. Коли вони щось вводять, вони хочуть, щоб цей стан замінив стан, який там раніше був. Коли Джейн Сміт у бухгалтерському обліку виходить заміж і змінює своє ім'я на Джейн Джонс, база даних, що підтримує бізнес-процес, який друкує її зарплату, краще стосується такої мутації. Коли ви стріляєте з кулемета по прибульцю, більшість людей не подумки моделює це як побудова нового прибульця з меншою кількістю точок удару; вони моделюють це як мутацію існуючих властивостей прибульця.
Коли концепції мови програмування принципово працюють проти модельованого домену, важко виправдати використання цієї мови.
Паралельність; Грає надзвичайно приємно завдяки зростаючій багатоядерній технології
Проблема просто штовхається. Завдяки незмінним структурам даних ви маєте дешеву безпеку ниток за рахунок можливо можливої роботи з несвіжими даними. Завдяки структурам даних, що змінюються, ви маєте перевагу завжди працювати над новими даними ціною, щоб написати складну логіку, щоб зберегти дані. Це не так, як один із них, очевидно, кращий за інший.
Програми зазвичай коротші, а в деяких випадках простіші для читання
За винятком випадків, коли їх довше і важче читати. Навчитися читати програми, написані у функціональному стилі, є складним навиком; людям здається, що набагато краще сприймати програми як ряд кроків, які слід дотримуватися, як рецепт, а не як ряд обчислень, які слід виконати.
Продуктивність зростає (приклад: Erlang)
Продуктивність повинна зрости багато, щоб виправдати величезні витрати на наймання програмістів, які вміють програмувати у функціональному стилі.
І пам’ятайте, ви не хочете викидати робочу систему; більшість програмістів не будують нові системи з нуля, а підтримують існуючі системи, більшість з яких були побудовані на нефункціональних мовах. Уявіть, що намагаєтесь виправдати це акціонерам. Чому ви брухтували існуючу працюючу систему оплати праці, щоб побудувати нову ціною мільйонів доларів? "Тому що функціональне програмування дивовижне" навряд чи порадує акціонерів.
Імперативне програмування - це дуже стара парадигма (наскільки я знаю) і, можливо, не підходить для 21 століття
Функціональне програмування теж дуже давнє. Я не бачу, наскільки вікова концепція є актуальною.
Не зрозумій мене неправильно. Я люблю функціональне програмування, я приєднався до цієї команди, тому що хотів допомогти перенести концепції з функціонального програмування в C #, і я вважаю, що програмування в непорушному стилі - це шлях майбутнього. Але існують величезні витрати на програмування у функціональному стилі, якого не можна просто побажати. Перехід до більш функціонального стилю відбуватиметься повільно і поступово протягом десятиліть. І ось що це буде: перехід до більш функціонального стилю, а не оптова охоплення чистоти та краси Haskell та відмова від C ++.
Я будую компілятори для життя, і ми неодмінно використовуємо функціональний стиль для наступного покоління інструментів компілятора. Це тому, що функціональне програмування є принципово гарною відповідністю для різних проблем, з якими ми стикаємося. Наші проблеми полягають у використанні сировинної інформації - рядків та метаданих - та перетворенні їх у різні рядки та метадані. У ситуаціях, коли трапляються мутації, як хтось набирає IDE, проблемний простір по суті піддається функціональним методам, таким як поступова перебудова лише тих частин дерева, які змінилися. Багато доменів не мають цих приємних властивостей, які роблять їх очевидно придатними до функціонального стилю .