Подход к проектированию больших функциональных программ - PullRequest
1 голос
/ 02 сентября 2011

Я много читаю на функциональных языках и, возможно, хотел бы поиграть с переписыванием некоторых частей моего приложения на F #. Лучше ли дизайн снаружи или изнутри?

Ответы [ 5 ]

5 голосов
/ 02 сентября 2011

Одна из влиятельных работ на тему FP Почему функциональное программирование имеет значение Джона Хьюза, может рассматриваться как прямой ответ:

наша способность разлагаться проблема в деталях напрямую зависит от нашей способности склеивать решения все вместе. Для поддержки модульного программирования язык должен обеспечивать хорошее клей. Функциональные языки программирования предоставляют два новых вида клея - функции высшего порядка и ленивая оценка. Используя эти клеи можно модульно программы новыми и полезными способами, и мы показали несколько примеров этого. Меньшие и более общие модули можно использовать более широко, облегчая последующие программирование. Это объясняет, почему функциональные программы намного меньше и легче написать, чем обычные. Это также обеспечивает цель для функциональных программисты нацеливаться на. Если какая-либо часть программы является грязной или сложной, программист должен попытаться его модульно обобщить и обобщить. Он или она должна ожидать использовать функции высшего порядка и ленивую оценку в качестве инструментов за это.

Я также рекомендовал бы посмотреть современное интервью с Джоном Хьюзом в InfoQ .

4 голосов
/ 02 сентября 2011

Вот одна статья, которая действительно помогла мне разобраться с функциональным программированием:
http://prog21.dadgum.com/23.html
Это руководство по созданию клона Pac-Man с использованием методов функционального программирования.Я даже не узнаю язык, который он использовал (возможно, это был Эрланг), но объяснение помогло мне понять правильное мышление, которое я использовал при переписывании одной из моих программ в Схеме.

3 голосов
/ 02 сентября 2011

Я вообще не эксперт по этой теме, но вот ссылка на статью по этой теме, написанную нашим "очень" Брайаном :

Как функциональное программирование влияет на структуру вашего кода?

И некоторые вопросы от SO & Programmers (где, кстати, я подозреваю, этот вопрос лучше подойдет)

2 голосов
/ 02 сентября 2011

Не уверен, что я понимаю, что подразумевается под "наизнанку" / "снаружи на", но FP наиболее полезен "в малом" - на уровне функций.ОО, вероятно, все еще лучший способ организовать проекты в целом.Проще всего иметь дело с объектами, которые связаны с вашей бизнес-областью.

1 голос
/ 02 сентября 2011

Я предполагаю, что снаружи вы имеете в виду подход сверху донизу, а изнутри вы имеете в виду снизу вверх. Если это то, что вы имеете в виду, то FP больше подходит для подхода снизу вверх, т.е. наизнанку.

При разработке программ FP подумайте о решении проблемы, используя:

  • Структура данных: какие все данные должны обрабатывать ваши приложения и какая структура данных наиболее подходит для представления этих данных.
  • Функция: функция выполняет одно действие (и делает это правильно).
  • Композиция: создание новых функций, которые достигают своих целей путем составления других функций с использованием техники, такой как функции и композиции высшего порядка.
  • Другие более продвинутые и абстрактные техники ФП, такие как монады и т. Д.

Таким образом, в основном вы начинаете снизу, для каждой атомарной проблемы вы пишете функцию, а затем, перемещаясь вверх по дизайну, используете эти атомарные функции для создания функций на более высоком уровне с использованием композиции.

Помните, что всегда думайте о решении проблемы, используя абстракции и составление этой абстракции, а не думайте последовательно, как это было бы в императивном программировании.

...