Заключение - Основные свойства функциональных языков программирования
Основной особенностью функционального программирования, определяющей как преимущества, так и недостатки данной парадигмы, является то, что в ней реализуется модель вычислений без состояний. Если императивная программа на любом этапе исполнения имеет состояние, то есть совокупность значений всех переменных, и производит побочные эффекты, то чисто функциональная программа ни целиком, ни частями состояния не имеет и побочных эффектов не производит. То, что в императивных языках делается путем присваивания значений переменным, в функциональных достигается путем передачи выражений в параметры функций. Непосредственным следствием становится то, что чисто функциональная программа не может изменять уже имеющиеся у нее данные, а может лишь порождать новые путем копирования и/или расширения старых. Следствием того же является отказ от циклов в пользу рекурсии.
Привлекательная сторона вычислений без состояний - повышение надежности кода за счет четкой структуризации и отсутствия необходимости отслеживания побочных эффектов. Любая функция работает только с локальными данными и работает с ними всегда одинаково, независимо от того, где, как и при каких обстоятельствах она вызывается. Невозможность мутации данных при пользовании ими в разных местах программы исключает появление труднообнаруживаемых ошибок (таких, например, как случайное присваивание неверного значения глобальной переменной в императивной программе).
Таким образом, имеется возможность протестировать каждую функцию в программе, просто вычислив ее от различных наборов значений аргументов. При этом можно не беспокоиться ни о вызове функций в правильном порядке, ни о правильном формировании внешнего состояния. Если любая функция в программе проходит модульные тесты, то можно быть уверенным в качестве всей программы. В императивных программах проверка возвращаемого значения функции недостаточна: функция может модифицировать внешнее состояние, которое тоже нужно проверять, чего не нужно делать в функциональных программах.
Отсутствие побочных эффектов гарантировано, в любом вызове функции всегда допустимо параллельное вычисление двух различных параметров - порядок их вычисления не может оказать влияния на результат вызова.
Недостатки функционального программирования вытекают из тех же самых его особенностей. Отсутствие присваиваний и замена их на порождение новых данных приводят к необходимости постоянного выделения и автоматического освобождения памяти, поэтому в системе исполнения функциональной программы обязательным компонентом становится высокоэффективный сборщик мусора. Нестрогая модель вычислений приводит к непредсказуемому порядку вызова функций, что создает проблемы при вводе-выводе, где порядок выполнения операций важен. Кроме того, очевидно, функции ввода в своем естественном виде (например, getchar из стандартной библиотеки языка C) не являются чистыми, поскольку способны возвращать различные значения для одних и тех же аргументов, и для устранения этого требуются определенные ухищрения.
Для преодоления недостатков функциональных программ уже первые языки функционального программирования включали не только чисто функциональные средства, но и механизмы императивного программирования (присваивание, цикл, "неявный PROGN" были уже в LISPе). Использование таких средств позволяет решить некоторые практические проблемы, но означает отход от идей (и преимуществ) функционального программирования и написание императивных программ на функциональных языках.
В чистых функциональных языках эти проблемы решаются другими средствами, например, в языке Haskell ввод-вывод реализован при помощи монад - нетривиальной концепции, позаимствованной из теории категорий.
Похожие статьи
-
История функционального программирования - Основные свойства функциональных языков программирования
Широко известно, что теоретические основы императивного программирования были заложены еще в 30-х годах XX века учеными Аланом Тьюрингом и Джоном фон...
-
Чистота (отсутствие побочных эффектов) - Основные свойства функциональных языков программирования
В императивных языках функция в процессе своего выполнения может читать и модифицировать значения глобальных переменных и осуществлять операции...
-
Введение - Основные свойства функциональных языков программирования
Созданная в 1998 году спецификация языка Haskell (названного так в честь ученого Хаскелла Карри, одного из основоположников функционального...
-
Строгая типизация - Основные свойства функциональных языков программирования
Практически все современные языки программирования являются строго типизированными языками (возможно, за исключением языка JavaScript и его диалектов, не...
-
Отложенные (ленивые) вычисления - Основные свойства функциональных языков программирования
В традиционных языках программирования (например, C++) вызов функции приводит к вычислению всех аргументов. Этот метод вызова функции называется...
-
Основы функционального программирования - Основные свойства функциональных языков программирования
Функциональное программирование - раздел дискретной математики и парадигма программирования (совокупность идей и понятий, определяющая стиль написания...
-
Модульность, Функции - это значения - Основные свойства функциональных языков программирования
Механизм модульности позволяет разделять программы на несколько сравнительно независимых частей (модулей) с четко определенными связями между ними. Тем...
-
Языки и методы параллельного программирования - Администрирование параллельных процессов
Применение параллельных архитектур повышает производительность при решении задач, явно сводимых к обработке векторов. Автоматическое распараллеливание...
-
Основные типы данных языка Си - Основы программирования
Язык Си относится к языку с жестко определенными типами данных: каждое имя всегда обозначает объект некоторого типа, причем этот тип нельзя изменить до...
-
Краткость и простота - Основные свойства функциональных языков программирования
Программы на функциональных языках обычно намного короче и проще, чем те же самые программы на императивных языках. Для примера можно сравнить программы...
-
Для программирования агентов могут применяться: универсальные языки (Java, C++ , Visual Basic и др.), языки представления знаний (SL, KIF), языки...
-
Правила записи программы на языке Си - Основы программирования
Как указывалось выше, программа перед обработкой компьютером должна быть помещена в файл на диске. Обычно этот файл имеет расширение <.c>. Рассмотрим...
-
Подпрограммы - Язык программирования PERL. Сфера применения
Как и все структурированные языки программирования, Perl поддерживает подпрограммы. Подпрограмма может быть определена с помощью ключевого слова sub, как...
-
Языки и системы программирования, их эволюция - Автоматизация решения задач пользователя
Язык программирования - это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме. Процессор компьютера непосредственно...
-
Заключение - Программирование на языке C++
Для написания данного отчета были применены различные теоретические материалы, благодаря которым была закреплена теория и подготовлена база для...
-
В используемой мной версии "MS Visual Studio" (версия 10 доступна технология. NET4.0) доступно несколько языков программирования: - C#; - C++; - F#; -...
-
Завершив выбор схемы работы системы и общего принципа работы ее частей и выбрав тип базы данных, следует перейти к выбору языка программирования....
-
СХЕМА АЛГОРИТМА РАБОТЫ ПРОГРАММЫ, ЗАКЛЮЧЕНИЕ - Основы программирования в операционной системе Unix
Блок-схема главной функции программы (main) изображена на рисунке 4. Рисунок 4 - блок-схема main. cpp Блок-схема модуля (Math. cpp) изображена на рисунке...
-
Предисловие, Теория "Основные понятия Visual Basic" - Visual Basic. Основы программирования
Язык программирования Visual Basic все шире используется в российском образовании. Одна из проблем, с которыми сталкивается преподаватель, работающий с...
-
Вычислить приближенное значение определенного интеграла с подынтегральной функцией f(x) заданным методом и проверить точность вычислений по формуле...
-
При создании программ и формировании структур баз данных нередко применяются формальные способы их представления - формальные нотации, с помощью которых...
-
Технология программирования Для реализации поставленной задачи наиболее удобной парадигмой программирования будет являться объектно-ориентированная...
-
Выбор языка программирования Язык С++ является в настоящее время наиболее распространенным и перспективным языком промышленного программирования. Он...
-
При извлечении текста из Интернета, он не имеет никой разметки и представлен в виде сплошного набора предложений. Для дальнейшего использования...
-
В нашей курсовой работе была поставлена задача создания обучающей программы по информатике, с помощью которой студенты смогут проверить свои знания в...
-
Основные операторы - Функциональные модели универсального нейрокомпьютера
Оператор присваивания состоит из двух частей, разделенных знаком "=". В левой части оператора присваивания могут участвовать им Ена любых переменных. В...
-
Принципы SOLID - Программирование на языке C++
SOLID - мнемонический акроним, введенный Майклом Фэзерсом ( Michael Feathers ) для первых пяти принципов, названных Робертом Мартином в начале 2000-х,...
-
Из универсальных языков программирования сегодня наиболее популярны следующие: Бейсик (Basic), Паскаль (Pascal), Си++ (C++), Ява (Java). Для каждого из...
-
Заключение - Электронный учебник по предмету "Основы алгоритмизации и программирования"
В ходе выполнения данной работы был проведен анализ научной и методической литературы, была изучена специфика электронного пособия, изучен и освоен язык...
-
Языки программирования баз данных - Теоретические основы информационных технологий
Эта группа языков отличается от алгоритмических языков, прежде всего решаемыми задачами. База данных - это файл (или группа файлов), представляющий собой...
-
Поколения языков программирования Языки программирования принято делить на пять поколений. В первое поколение входят языки, созданные в начале 50-х...
-
CoDeSys -- универсальный инструмент разработки прикладных программ для программируемых логических контроллеров на языках стандарта IEC 61131-3. Данный...
-
Платформа. NET Framework - Программирование на языке C++
.NET Framework - программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common...
-
Разработка приложения на языке C++ - Программирование на языке C++
C++ - объектно-ориентированный язык программирования. Разработан в 1998--2001 годах группой инженеров под руководством Андерса Хейлсберга в компании...
-
МОДУЛИ - Язык программирования Паскаль
Наличие модулей в Turbo Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться...
-
ПРОЦЕДУРЫ - Язык программирования Паскаль
Delete (St, Pos, N) - удаление N символов строки St, начиная с позиции Pos. Если значение Pos > 255, возникает ошибка. Значение St Выражение Результат...
-
Скалярные переменные - Язык программирования PERL. Сфера применения
Как отмечалось, скалярная переменная может содержать единственное значение. В языке Perl имена скалярных переменных всегда начинаются со знака ($). В еле...
-
Использование языка PERL для написания CGI-cкриптов - Язык программирования PERL. Сфера применения
Как вы узнали из предыдущей главы, CGI обеспечивает узлам Web вoзмoжнoсть интерактивной работы с клиентскими программами, в качестве которых обычно...
-
Резюме - Язык программирования PERL. Сфера применения
В этой главе рассмотрено введение в программирование на языке Perl. Используя рассмотренные здесь концепции, можно писать сложные скрипты CGI на языке...
-
Таблица сопротивлений некоторых термометров сопротивления Температурав °C Pt100 Pt1000 Typ: 404 Typ: 501 -50 80, 31 803, 1 -40 84, 27 842, 7 -30 88, 22...
Заключение - Основные свойства функциональных языков программирования