Ответ заключается в том, что функциональное программирование - это программирование с использованием функций, как они определены в математике (короче говоря, без побочных эффектов, которые отображают значения из домена в кодомен). На самом деле перевести это в «как думать» - это часть, которая махает рукой, о которой трудно быть исчерпывающим, но я приведу несколько своих мыслей:
- Определение более важно, чем эффективность. То есть, очевидно, правильная реализация функции, которую можно понять из всего поведения, лучше, чем сложная оптимизированная, о которой трудно рассуждать. (И следует отдавать предпочтение как можно дольше; до тех пор, пока не появятся доказательства, нужно нарушить это хорошее свойство.)
- Математическая функция не имеет побочных эффектов. Полезная программа должна иметь побочные эффекты. Функциональный программист осознает побочные эффекты как очень опасную и усложняющую вещь и разрабатывает программу как набор функций, которые принимают выходные значения от одного побочного эффекта и создают входные значения для следующего побочного эффекта.
Номер один связан с расплывчатым: «элегантный код». Понимание списка может представлять собой очень сжатые и математические уравнения, такие как определения функций. Просто посмотрите на быструю сортировку, реализованную с помощью LC. Вот как я определяю элегантность, лаконичность и проясняю все виды поведения. Не тот Perl-код-гольф, где вы чаще всего лаконичны и загадочны.
Номер два - это то, что я использую изо дня в день во всех программах. Разделите код на функции (методы, процедуры и т. Д.) Текущего состояния, которые являются вычислениями без побочных эффектов и дают входные данные для следующего действия (даже для следующего действия). Когда значение будет возвращено, передайте его подпрограмме, которая выполняет описанное действие, а затем начните сначала.
В моей голове я изображаю процесс Эрланга как граф конечного автомата, где каждая вершина является побочным эффектом и функцией, выход которой - какой край выбрать из вершины. Высокое отношение к побочным эффектам - это то, чему научила меня парадигма функционального программирования. Особенно в Erlang, поскольку побочные эффекты действительно важны для параллелизма, а Erlang делает параллелизм очень доступным.
Точно так же у некоторых изолированных племен есть только одно слово для чисел выше 3, или нет слов для «мое» / «твое». Такое чувство, что в популярных языках нет слов «это вызовет побочный эффект», но в функциональном программировании это есть. Это заставляет вас постоянно осознавать это, и это хорошо.