Мені справді важко зрозуміти різницю між парадигмами процедурної та функціональної програми.
Ось перші два абзаци із статті Вікіпедії про функціональне програмування :
В інформатиці функціональне програмування - це парадигма програмування, яка розглядає обчислення як оцінку математичних функцій та уникає даних про стан та змінні. Він підкреслює застосування функцій на відміну від імперативного стилю програмування, який підкреслює зміни у стані. Функціональне програмування має своє коріння в обчисленні лямбда, формальній системі, розробленій в 1930-х роках для дослідження визначення функцій, застосування функції та рекурсії. Багато функціональних мов програмування можна розглядати як опрацьовування лямбда-числення.
На практиці різниця між математичною функцією та поняттям "функція", що використовується в імперативному програмуванні, полягає в тому, що імперативні функції можуть мати побічні ефекти, змінюючи значення стану програми. Через це їм не вистачає еталонної прозорості, тобто один і той же мовний вираз може призводити до різних значень у різний час залежно від стану програми, що виконується. І навпаки, у функціональному коді вихідне значення функції залежить лише від аргументів, які вводяться у функцію, тому виклик функції
f
двічі з тим самим значенням для аргументуx
дасть той самий результатf(x)
обидва рази. Усунення побічних ефектів може значно полегшити розуміння та прогнозування поведінки програми, що є однією з ключових мотивацій розвитку функціонального програмування.
У пункті 2, де сказано
І навпаки, у функціональному коді вихідне значення функції залежить лише від аргументів, які вводяться у функцію, тому виклик функції
f
двічі з однаковим значенням для аргументуx
дасть однаковий результатf(x)
обох разів.
Це не той самий випадок, що стосується процесуального програмування?
На що слід звернути увагу у процедурних та функціональних, які виділяються?