amarao (amarao_san) wrote,
amarao
amarao_san

Category:

В чём польза от функционального программирования?

Если императивный код получился:
- яснее (clarity)
- компактнее и выразительнее (concise)
- без сайд-эффектов
- без ухудшения отношений с глобальными стейтами
- аналогичной производительности

То единственным достоинством функционального выражения является придержание парадигме (и стилю).

По каждому из понятий (примеры на python):
clarity - это понятность предметной области. Если предметная область не связана с самим языком (т.е. не является boilerplate), то никакой крутости синтаксис не позволит понять смысла выражения( например, lambda a: a*1.1 vs def get_adjusted_score(initial_score): return initial_score * RISK_FACTOR). Единственный метод передать смысл предметной области - именование объектов. Чем более точно названы объекты, тем понятнее, что этот код делает. Это clarity.

concise:
return map(str.split, file('foo', 'r').readlines())

vs:

f = file('foo', 'r')
lines = f.readlines()
stripped_lines = lines.strip()
for line in stripped_line:
    yield line


(заметим, это контр-пример, где функциональное компактнее), обратный пример, это:

return map(lambda: foo: bar(3, foo), filter(lambda x: x >0,  bar_list))


vs

for bar in bar_list:
  if bar >0:
    yield bar(3, foo)


Противоположным concise является verbose и cluttered - буквы, которые читатель и так додумает без специальной компетенции и знаний предметной области или такие выражения, за которыми сложно уследить.

Сайд-эффекты, глобальный стейт и прозводительность и так понятны.

Итак, в чём польза функционального программирования, если параметры выше лучше у императивного кода? Как мне видится, их нет. Таким образом, хороший программист должен знать меру. Если что-то без ухудшения других параметров можно написать с большим clarity и conciseness, надо делать так. Даже если это "выбивается" за выбранную парадигму.

Данное рассуждение совершенно так же применимо к "в чём польза императивного программирования?", но такого вопроса обычно не ставят.
Tags: программирование
Subscribe

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 20 comments

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • positive nagging

    Для повышения морали в коллективе было решено запретить токсичные и негативные сообщения в чате. Теперь все сообщения в чате выглядят так: Resolved…

  • Шли годы, а я учусь башу.

    Офигеть. Офигеть. echo <(echo hello) foobar /dev/fd/63 foobar Я этого честно не знал. Я знал, что в конце можно, а что можно в середине -…