Все, что связано с компьютерными программами, интерфейсом и программированием
Ответить
Профессор
Участник
Баланс:5492
 
Сообщения: 327
Регистрация: 26.10.2019

Императивное vs Функциональное программирование

Профессор » 01.10.2022 12:22

+
6
-
Парадигма — это стиль написания исходного кода компьютерной программы. Существует несколько парадигм.

Императивное программирование (от англ. imperative — приказ) — это парадигма программирования, которая описывает процесс вычисления в виде инструкций, изменяющих состояние данных.

Программа — набор инструкций изменяющих состояние (данные). Мы говорим КАК выполнить задачу, описывает алгоритм, даем набор последовательных инструкций.

________________________

Для этой парадигмы характерно использование:

- именованных переменных;
- оператора присваивания;
- составных выражений;
- подпрограмм;
- циклов.

К подвидам императивного программирования относят Процедурное и Объектно-ориентированное программирование (ООП).


Декларативное программирование — это парадигма программирования, в которой задается спецификация решения задачи, то есть описывается, ЧТО представляет собой проблема и ожидаемый результат. Декларативные программы не используют состояния, то есть не содержат переменных и операторов присваивания. Программа — спецификация описывающая решение задачи.

К подвидам декларативного программирования относят Функциональное и Логическое программирование.

_________________________

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

Для этой парадигмы характерно:

- функции первого класса (можно передавать как аргументы и возвращать из других функций);
- функции высшего порядка (принимают на вход другие функции);
- рекурсии;
-состояние никогда не меняется;
-не используется присваивание.

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

Вы можете видеть в функциональных языках использование знака =, но в функциональных языках он оно называется “связывание“. Мы не изменяем никаких переменных, мы просто даем имя (алиас) какому-то выражению и потом обращаемся к этому выражению через это имя.

Основой для функционального программирования являются Лямбда-исчисления, многие функциональные языки можно рассматривать как «надстройку» над ними.

Лямбда-функции — это функции, у которой фактически нет имени. Лямда-выражения — анонимные функции. Понятие пришло из математики, где использовалась специальная форма записи функций, ликвидирующая неоднозначности функция/значение функции и пр.


Примеры языков
Императивные: Ruby, PHP, Python, C++, C#, Java, JavaScript, Swift и т.д.
Функциональные: Haksell, Erlang
Логические: Prolog
Мультипарадигменные: Clojure, Ocaml, Scale, F#

Функционально программировать можно практически в любом языке программирования.

Все функциональные языки имеют в своем арсенале инструменты для императивного программирования, потому что абсолютно декларативный язык не имел бы смысла (какой смысл от языка в котором вы не можете получившееся вычисление записать в файл/базу/отправить по сети/или вывести на экран).


Выводы

Еесли кратко: императивная — манипулирование состоянием; декларативная парадигма — отсутствие состояния.

В общем и целом, декларативное программирование идет от человека к машине, тогда как императивное — от машины к человеку.

http://sauron.org.ua/post/1288
Поделиться:

Аватара пользователя
Director
Эксперт
Баланс:18628
 
Сообщения: 1130
Регистрация: 20.06.2018

Re: Императивное vs Функциональное программирование

Director » 04.10.2022 09:38

+
5
-
Компьютерное программирование в сфере АйТи - это наилучшая аналогия для понимания того, как устроен Дух живого организма, а также как устроена наша Душа.

Давайте попробуем понять - есть ли в программах Духа что-то подобное Императивному и/или Фунциональному программированию.
Профессор писал(а):
01.10.2022 12:22
Парадигма — это стиль написания исходного кода компьютерной программы. Существует несколько парадигм.

Императивное программирование (от англ. imperative — приказ) — это парадигма программирования, которая описывает процесс вычисления в виде инструкций, изменяющих состояние данных.

Программа — набор инструкций изменяющих состояние (данные). Мы говорим КАК выполнить задачу, описывает алгоритм, даем набор последовательных инструкций.


Декларативное программирование — это парадигма программирования, в которой задается спецификация решения задачи, то есть описывается, ЧТО представляет собой проблема и ожидаемый результат.

Программа — спецификация описывающая решение задачи. Декларативные программы не используют состояния, то есть не содержат переменных и операторов присваивания.

К подвидам декларативного программирования относят Функциональное и Логическое программирование.


Если кратко: императивная — манипулирование состоянием; декларативная парадигма — отсутствие состояния.

В общем и целом, декларативное программирование идет от человека к машине, тогда как императивное — от машины к человеку.
Лично я, не будучи специалистом в сфере АйТи-программирования, толком не понял разницы между этими двумя парадигмами.

Интересно отметить, что все слова мне известны (спецификация, состояние, задача, данные, оператор присваивания, пр.), но понятная образная модель не получается. Не хватает практических навыков в этой сфере деятельности.

Я лишь понял, что в АйТи-программировании используются оба подхода: в каких-то случаях первый подход, а в каких-то - второй.
Вполне вероятно, что в живой природе также используются оба подхода.


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


Вы можете видеть в функциональных языках использование знака =, но в функциональных языках он оно называется “связывание“. Мы не изменяем никаких переменных, мы просто даем имя (алиас) какому-то выражению и потом обращаемся к этому выражению через это имя...

Функционально программировать можно практически в любом языке программирования.

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

Ответить
   ПОМОЩЬ по форуму!