В чем разница между функциональным, структурированным и процедурным программированием?
Вопрос
Я прочитал несколько статей по всем предметам, но я не совсем получаю различия.
Решение
Структурированное программирование - это старый термин, который, я думаю, будет охватывать функциональные, процедурные и многое другое. Это в основном означает использование явных структур управления потоком, а не прыгать непосредственно от инструкции к инструкции.
Функциональное и процедурное программирование являются, в этом смысле структурированные парадигмы. Функциональное программирование также является декларативным программированием - структура, данная вашему коду, соответствует его значению - программа - это функция, которая меняет состояние мира. Процедурное программирование - это то, что вы бы считали «типичным» программированием на любом языке C или его потомках, включая OO -языки, такие как Java и C ++. Программа представляет собой серию инструкций, которые будут выполнены последовательно, и вызывая субпроцедуры по пути.
Или, как было известно:
Функциональное программирование похоже на описание вашей проблемы математику. Императивное программирование - это все равно, что дать инструкции идиоту.
--- arcus, #scheme on Freenode
Другие советы
Функциональное программирование использует функции в качестве первоклассных элементов. Использование функций более высокого порядка (принятие и/или возвращающиеся функции); приводя к мощным конструкциям и хорошо факторированным коду. Некоторые люди сосредотачиваются также на аспекте чистоты FP, который должен сказать, что функции всегда должны возвращать один и тот же результат, учитывая тот же вход. Я полагаю, это два основных столпа FP. Я также вижу, как избегает побочных эффектов как по существу, немного абстрагирует инструкции на уровне нагрузки/магазина.
Структурированное программирование восходит к «Goto, считающей вредной» бумагой Djikstra. Это означает использование if/then/else/elif структур, Do/while/до/для петли и т. Д. Вместо того, чтобы прибегать к Goto. По сути, это немного абстрагирует от инструкций сравнения/филиала. Структурированное программирование является ортогональным как для функционального, так и процедурного программирования.
Процедурное программирование, я полагаю, относится к программированию с помощью императивных «подпрограмм» (в отличие от чистых «функций»), состоящих в целом из серии «утверждений» (в отличие от «выражений»), оставляя побочные эффекты.