С тех пор как я начал изучать F # и OCaml в прошлом году, я прочитал огромное количество статей, которые настаивают на том, что шаблоны проектирования (особенно на Java) являются обходными решениями для недостающих функций на императивных языках. Одна статья, которую я нашел дает довольно сильные претензии:
Большинство людей, с которыми я встречался, прочитали Дизайн шаблонов книга от Ган 4. Любой уважающий себя программист скажут вам, что книга языковой агностик и шаблоны применительно к разработке программного обеспечения в вообще, независимо от того, какой язык ты используешь. Это благородное требование. К сожалению, он далек от правда.
Функциональные языки чрезвычайно выразительный. На функциональном языке не нужны шаблоны проектирования потому что язык, вероятно, настолько высок уровне, вы в конечном итоге программируете в концепции, которые устраняют дизайн шаблоны все вместе.
Основные функции функционального программирования включают функции как первоклассные значения, каррирование, неизменные значения и т.д. Мне не кажется очевидным, что шаблоны проектирования OO аппроксимируют любые из этих функций.
Кроме того, в функциональных языках, поддерживающих OOP (например, F # и OCaml), мне кажется очевидным, что программисты, использующие эти языки, будут использовать те же шаблоны проектирования, которые доступны для всех других языков ООП. Фактически, прямо сейчас я использую F # и OCaml каждый день, и нет никаких ярких различий между шаблонами, которые я использую в этих языках, против шаблонов, которые я использую, когда пишу на Java.
Есть ли какая-то правда в утверждении, что функциональное программирование устраняет необходимость в шаблонах проектирования ООП? Если да, можете ли вы опубликовать или связать пример типичного шаблона проектирования ООП и его функционального эквивалента?