В чем разница между функциональным, структурным и процедурным программированием?

Я прочитал несколько статей по всем предметам, но я не совсем понимаю различий.


person Demian Kasier    schedule 09.12.2010    source источник


Ответы (3)


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

В этом смысле функциональное и процедурное программирование являются структурированными парадигмами. Функциональное программирование также является декларативным программированием - структура, данная вашему коду, соответствует его значению - программа - это функция, которая изменяет состояние мира. Процедурное программирование - это то, что вы считаете «типичным» программированием на любом языке C или его потомках, включая объектно-ориентированные языки, такие как Java и C ++. Программа - это последовательность инструкций, которые должны выполняться последовательно, вызывая подпроцедуры на своем пути.

Или, как это было классно описано:

Функциональное программирование похоже на описание вашей проблемы математику. Императивное программирование - все равно что давать инструкции идиоту.

    --- arcus, #scheme on Freenode
person sclv    schedule 09.12.2010
comment
Цитата не совсем уместна для решения исходной проблемы OP, поскольку она посвящена разнице между парадигмами функционального и императивного программирования (да, хотя процедурное программирование обычно считается подпарадигмой императивного программирования). Более того, я бы сказал, что Java на самом деле не поддерживает процедурное программирование, поскольку в Java все является классом или объектом, за исключением новых функций Java 8, таких как лямбда-функции, которые были бы связаны с функциональным программированием. Итак, я должен проголосовать против этого ответа. - person nbro; 08.01.2017

Функциональное программирование использует функции как первоклассные элементы. Использование функций высшего порядка (принимающие и / или возвращающие функции); что приводит к мощным конструкциям и хорошо продуманному коду. Некоторые люди также обращают внимание на аспект чистоты FP, который означает, что функции всегда должны возвращать один и тот же результат при одном и том же вводе. Я считаю, что это два основных столпа ФП. Я также считаю, что избегание побочных эффектов по существу немного абстрагируется от инструкций уровня машины загрузки / сохранения.

Структурное программирование восходит к статье Джикстры "Goto Считается вредным". Это означает использование структур if / then / else / elif, циклов do / while / until / for и т. Д. Вместо использования goto. По сути, это немного абстрагируется от инструкций машинного уровня сравнения / ветвления. Структурированное программирование ортогонально как функциональному, так и процедурному программированию.

Я считаю, что процедурное программирование относится к программированию с императивными «подпрограммами» (в отличие от чистых «функций»), состоящих, как правило, из серии «операторов» (в отличие от «выражений»), оставляющих после себя побочные эффекты.

person AshleyF    schedule 09.12.2010
comment
Я бы сказал, что процедурное программирование - это подпарадигма императивного программирования, как также указано здесь: en.wikipedia. org / wiki / Imperative_programming - person nbro; 08.01.2017
comment
Совершенно верно, я удалю (иногда «императивное программирование») в сторону. Процедура действительно является подмножеством императива. На некоторых языках вполне возможно программировать императивно без процедур. Однако я считаю, что ключевое различие между процедурой и функцией в том, что первая является обязательной. Это то, что я имел в виду. - person AshleyF; 13.06.2017