Во многих источниках, по сути, в большинстве, почему-то принято связывать функциональную парадигму с декларативностью. Я много думал об этом, и совершенно не могу найти связи.
Прежде всего, прямое противопоставление тут -- императивное vs декларативное. С этим все понятно.
Код:
doThing -- императивное
thing -- декларативное
makeParagraphWithContent("this is a text") -- императивное
ParagraphWithContent("this is a text") -- декларативное
Просто мы в одном случае как бы даем инструкции процессору, а в другом как-бы декларируем, в этом и вся разница. Вопрос точки зрения и стиля, по большому счету.
Пусть у нас будет рекурсивный факториал, без циклов и присваиваний внутри -- функциональный стиль . Мы можем назвать эту функцию countFactorial.
Пусть у нас будет факториал с циклом внутри, кто нам мешает назвать его factorial?
На самом деле ведь, функциональная парадигма -- это подстановочная модель вычислений. Если мы используем деструктивное присваивания -- наша модель выходит за рамки функциональной парадигмы, но никто не мешает нам писать при этом декларативно. Обратное также справедливо.
На самом деле, не существует устоявшегося и правильного термина для программирования с деструктивными присваиваниями. Но оно не имеет отношения к императивности равно как и к декларативности. Это ортогональные понятия. Соответственно и связи между функциональностью и деклартивностью тоже не существует на мой взгляд. Вы согласны с этим?