О функциональном программировании

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

Для начало цитата из вики

Функциона́льное программи́рование — раздел дискретной математики и методология программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних. Противопоставляется парадигме императивного программирования

Основная идея функциональных языков состоит в том, что мы лишь описываем, КАК выполнить ту или иную задачу (функцию), и не отводим ей некоторого отдельного места в программе. Действительно, пусть я хочу посчитать некоторую величину, для этого мне нужно что-то складывать, умножать, делить, возводить в степень и т.д., т.е., в конечном счете, выполнять операции над результатом вычислений более простых функций, которые также описываются другими более простыми функциями и т.д. Какие же будут самые простейшие функции? Зависит от языка, но, само собой, это базовые операции над переменными (которых, вообще говоря, нет в функциональной парадигме) вроде сложения и числа/строки. Ведь с точки зрения ФП число 5 - это вовсем не число, а функция без параметров, которая возвращает число 5. Возможно, это не кажется очевидным, но это сделано для чистоты идеологии.

Теперь к вопросу “а оно мне надо?” Собственно, почти полностью согласен с автором статьи

Я не спорю с тем, что с функциональными языками связана особая романтика. Эта же романтика связана и с high performance computation-ами и с massive parallelism-ом. Эта романтика заставляет людей учить языки если не Unlambda то, по крайней мере, Prolog. Чем больше я изучал Unlambda и комбинаторную логику, чем больше я изучал Prolog и логическое программирование, тем больше я понимал, что им место дома, а не на работе. А на моей работе место Java c её предсказуемым неромантичным ООП и сборкой мусора.

Мне ОЧЕНЬ тяжело представить сайт, написанный на Haskell (хотя, говорят - есть), а уж тем более на Prolog (правда это уже не ФП), но ведь программист должен мыслить не как “нормальный человек” и не как машина (благо на ассемблере уже давно не пишут высокоуровневые вещи), а как нечто средне-непонятное, мыслящие то категориями объектов, то категориями функций и буллевой логики. Отсюда вывод - изучение функциональных и логических языков очень полезно для вашего ума, а значит в свободное время разомните мозг с LISP’ом или Prolog’ом (за который я все никак толком не возьмусь), но не вздумайте предложить эти языки работодателю :-)

Оставить комментарий