Мне действительно сложно понять разницу между парадигмами процедурного и функционального программирования.
Вот первые два абзаца из статьи Википедии о функциональном программировании :
В информатике функциональное программирование - это парадигма программирования, которая рассматривает вычисления как оценку математических функций и избегает состояния и изменяемых данных. Он подчеркивает применение функций, в отличие от императивного стиля программирования, который подчеркивает изменения в состоянии. Функциональное программирование уходит корнями в лямбда-исчисление, формальную систему, разработанную в 1930-х годах для исследования определения функции, ее применения и рекурсии. Многие языки функционального программирования можно рассматривать как развитие лямбда-исчисления.
На практике разница между математической функцией и понятием «функция», используемым в императивном программировании, заключается в том, что императивные функции могут иметь побочные эффекты, изменяя значение состояния программы. Из-за этого им не хватает ссылочной прозрачности, т. Е. Одно и то же языковое выражение может приводить к различным значениям в разное время в зависимости от состояния выполняющейся программы. И наоборот, в функциональном коде выходное значение функции зависит только от аргументов, которые вводятся в функцию, поэтому
f
двойной вызов функции с одним и тем же значением для аргументаx
приведет к тому же результату.f(x)
оба раза. Устранение побочных эффектов может значительно облегчить понимание и прогнозирование поведения программы, что является одной из ключевых мотиваций для разработки функционального программирования.
В пункте 2, где говорится
И наоборот, в функциональном коде выходное значение функции зависит только от аргументов, которые вводятся в функцию, поэтому
f
двойной вызов функции с одним и тем же значением для аргументаx
приведет к одинаковому результатуf(x)
оба раза.
Разве это не тот же самый случай процедурного программирования?
На что следует обратить внимание в отличии процедурного от функционального?