Я использую f # и Haskell для изучения функционального программирования на некоторое время. Пока я не получу одобрение в нашей компании, я все равно должен использовать C#. Тем не менее я все еще стараюсь оставаться в функциональном стиле, поскольку я заметил несколько преимуществ.От OO до функционального программирования на 10000 футов
Вот типичная проблема.
- Существует ключ-набор таблицы в базе данных с 3 ключами (6,5 млн строк)
- Есть 4 другие вспомогательные таблицы малого и среднего размера.
- Существуют сложные формулы, основанные на нескольких входах.
Я должен использовать данные из всего вышеперечисленного, чтобы вычислить значение и связать его с каждой строкой набора ключей и отправить его обратно в базу данных. Существует много поисков для остальных 4 таблиц. Для производительности это все сделано в памяти.
Я точно знаю, как сделать это в ОО со статическими словарями, объектными моделями, шаблонами стратегий и т. Д., Но функциональным способом я не могу избавиться от плохого запаха использования некоторых из этих конструкций.
В настоящее время я делаю следующие предположения для функционального решения.
Статические словари плохие. Кажется, что функция может иметь побочные эффекты.
Мне нужна функция Calculate, принимает неизменяемый объект (ы) и возвращает неизменяемый объект с тремя ключами и вычисленным значением. Внутри этой функции может быть другая функция в том же стиле.
Традиционные шаблоны OO, вероятно, не сработают.
Как бы вы разработали это на высоком уровне?
Я не прав? Я что-то пропустил?
Зависит от языка OO. C# отлично справляется с функциональными методами. И некоторые вещи можно сделать довольно функциональным способом в более болезненно негибких языках OO, таких как Java, но в этом случае, конечно, существует довольно много когнитивных трений. – JasonTrue
Если вы в конечном итоге пытаетесь сделать что-то функциональное и находитесь в среде Java, вероятно, лучше всего это сделать в Clojure. Хотя технически Lisp и не основанный на ML язык, его можно заставить работать с приложениями Java (генерирует байт-код JVM) и поддерживать функциональный стиль разработки. –
C# падает на многие функциональные методы.Чрезвычайно ограниченный тип вывода - это просто разбойник. Попробуйте написать тип функции, которая использует несколько общих параметров, например словарь функций. Уч. – MichaelGG