Как функциональное программирование влияет на Ваш стиль кодирования? [закрытый]

Могу ли я предложить вам взглянуть на инструмент Jenv

Это позволит вам в любое время переключаться между установленными JVM.

Просто как:

jenv global oracle-1.7

, а затем для тестирования:

jenv global oracle-1.6

И у вас есть гораздо больше команд.

7
задан Fredou 9 July 2009 в 14:36
поделиться

10 ответов

Основное применение - передача функций в функции более высокого порядка, такие как фильтр и карта (Где и Выбрать в .Net). Это действительно самое большое влияние, позволяющее писать такие вещи, как операции установки, только один раз, затем вещи, которые воздействуют на наборы или изменяют их.

Так что такие вещи, как

var SquareOfEvenIntegers = MyListOfInts
    .Where(i=>even(i))
    .Select(i=>i*i);

вместо

List<int> SquareOfEvenIntegers = new List<int>()
foreach(int i in MyListOfInts)
{
    if (even(i))
    {
        SquareOfEvenIntegers.Add(i*i);            
    }
}
6
ответ дан 6 December 2019 в 07:52
поделиться

Сейчас мне намного проще писать многопоточный код.

У меня меньше переменных уровня класса, чем раньше.

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

Я также склонен преследовать меня в кошмарах о закрытии скобок.

5
ответ дан 6 December 2019 в 07:52
поделиться

Мне приходят в голову две вещи, связанные с функциональным программированием, которое я использую:

  • Замена методов void, которые изменяют переменные класса на методы, возвращающие значения
  • Сделать классы неизменяемыми вместо того, чтобы иметь классы с сеттерами (антипаттерн JavaBeans)
4
ответ дан 6 December 2019 в 07:52
поделиться

Написание приличного фрагмента Haskell означает, что мне намного проще использовать Linq to SQL в моем коде C #.

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

Я написал большие куски как процедурного, так и функционального кода, что облегчает мне разбиение моего кода на более мелкие куски, которые принадлежат к одному стилю или Другой. Когда я знал только процедурное / ООП программирование, у меня было меньше инструментов в моем ментальном наборе инструментов.

Чтение исходных текстов библиотек в Haskell научило меня, как лучше свести мой код, чтобы отделить абстракции от реальной задачи.

Я получил много от написания Haskell!

3
ответ дан 6 December 2019 в 07:52
поделиться

Обработчики событий, которые являются замыканиями;

button.OnClick += (sender, args) => MessageBox.Show("we captured " + someCapturedVariable);
1
ответ дан 6 December 2019 в 07:52
поделиться

Я считаю, что переход Python 3.x к итераторам очень естественен для меня , потому что это напоминает мне ленивую оценку Haskell.

На самом деле, независимо от того, используете ли вы Python 2.x или Python 3.x, составления списков , map , itertools ], operator и (в несколько меньшей степени) functools , мои друзья!

1
ответ дан 6 December 2019 в 07:52
поделиться

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

Например, в Java я активно использую конструкции в коллекциях Commons, такие как Transformer и Predicate, которые по сути являются замыканиями, но реализованы как интерфейсы Java. Затем вы используете предоставленные служебные функции для преобразования и фильтрации элементов в коллекции. Это идет вразрез со "стандартным" императивным способом выполнения такого рода вещей в Java.

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

2
ответ дан 6 December 2019 в 07:52
поделиться

Поскольку функциональное программирование ортогонально ООП, оно действительно открыло мне глаза на то, как я структурирую свои классы.

  • Я предпочитаю иметь более осмысленные интерфейсы, которые напоминают концепции.
  • Мой код является лучше разделены, и у меня есть более мелкие значимые классы. Я редко создаю класс только для реализации шаблона.
  • Я создаю меньше сеттеров, вместо этого я вызываю разные функции-члены, которые вычисляют нужное мне значение и передают его одному сеттеру.
  • До функционального программирования я бы никогда не подумал передачи функции в качестве параметра в качестве решения при попытке решить проблему. Теперь это решение просто приходит мне в голову и действительно помогает с DRY.
  • Мой код содержит больше выражений вместо операторов.
  • Если решение позволяет это, я склоняюсь к ленивым вычислениям.
1
ответ дан 6 December 2019 в 07:52
поделиться

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

0
ответ дан 6 December 2019 в 07:52
поделиться

Я немного писал об этом в

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

Некоторые из них специфичны для F #, но есть много общих наблюдений.

0
ответ дан 6 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: