В чем разница между функциональным, структурированным и процедурным программированием? - PullRequest
21 голосов
/ 09 декабря 2010

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

Ответы [ 3 ]

37 голосов
/ 09 декабря 2010

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

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

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

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

    --- arcus, #scheme on Freenode
10 голосов
/ 09 декабря 2010

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

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

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

...