Я только начал с функционального программирования (с JavaScript и Node.js), и с точки зрения вещей, похоже, что код, который я пишу, вырастет в адскую базу кода для управления по сравнению с языками программирования, которые имеют своего рода объектно-ориентированная парадигма.
С ООП я знаком с практиками, которые гарантируют, что ваш код легко управляется и расширяется. Но я не уверен в подобном соглашении с функциональным программированием.
Ответы:
На практике большая функциональная кодовая база все еще должна быть разделена на какую-то структурную систему. Если вам удобно в ООП, классы остаются естественным структурирующим элементом. Вы стремитесь к «функциональным объектам»: концептуально связанные функции размещаются вместе в классе. Конечно, вы избегаете не разговорного состояния и полагаетесь на переменные экземпляра.
Выходя за рамки структуры, существуют определенные методы, такие как частичное применение функции, которые предпочтительны в функциональном мире для расширения, удобства обслуживания и обобщения. Однако научиться распознавать эти возможности может быть сложно при работе в гибридном функционально-объектном режиме. Лично я думаю, что это хорошая идея - работать в гибридном режиме, но учиться и играть в более чистой среде, например, предоставляемой Haskell.
источник
Языки функционального программирования используют множество мощных концепций для построения высококачественного кода, например: частично примененные функции, композиции функций (это действительно мощный и мой любимый), макросы, функции высшего порядка. И не забыть неизменные структуры данных.
источник
Вместо того, чтобы отказываться от ООП для FP, попробуйте дополнить его некоторыми шаблонами FP. В любое время, когда вам нужно обработать коллекцию, это хороший кандидат, который указывает на общий набор методов FP, таких как map, сложить и уменьшить. Взгляните на underscore.js и backbone, инфраструктуру MVC, в которой широко используются первые.
источник