Какие языки поддерживают функциональную парадигму программирования
Перейти к содержимому

Какие языки поддерживают функциональную парадигму программирования

  • автор:

ВЛИЯНИЕ ФУНКЦИОНАЛЬНОГО ПРОГРАММИРОВАНИЯ НА СОВРЕМЕННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ / С++ / PYTHON / HASKELL / ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ / ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ / ЛЯМБДА-ФУНКЦИЯ / МОНАДИЧЕСКИЙ ИНТЕРФЕЙС / АСИНХРОННОСТЬ / ЛЕНИВАЯ ОЦЕНКА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Телегин В.А.

Статья посвящена исследованию влияния функционального программирования на современные языки программирования. Автором обосновывается актуальность и значимость темы исследования. Современные языки программирования обладают большим набором различных инструментов и полезных функций, которые позволяют писать совершенно другой код на том же языке, для одной и той же задачи. Парадигма программирования — это, в первую очередь, способ мышления — то, как программист думает о представлении и обработке. Другими словами, парадигма программирования существует в сознании программиста; она не является частью языка. Разные языки могут в разной степени поддерживать определенную парадигму. В статье постулируется о том, что в настоящее время, функциональное программирование было актуальным направлением в разработке программного обеспечения с самых ранних дней, но приобрело новое значение в современную эпоху. Рассматриваются концепции, лежащие в основе функционального программирования . Заключается о том, что в современном мире, функциональное программирование переживает «ренессанс» из-за того, что функциональные языки позволяют писать декларативный, понятный и надежный программный код. Особый акцент делается на положении о том, что тренд на изучение и имплементацию концепций функциональной парадигмы существует в современных языках программирования общего пользования, что делает большинство современных языков программирования — мультипарадигмальными. В целом, анализ научной литературы позволил сделать вывод о том, что языки программирования движутся вперед и активно развиваются, накапливая новые, все более совершенные и удобные инструменты. Очевидно, что популярные языки, такие как Python и С ++, приобретают все большее количество функций, которые произошли от функционального программирования .

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Телегин В.А.

О представлении модельного времени при помощи механизмов функционального программирования
О ФУНКЦИОНАЛЬНОМ ПРОГРАММИРОВАНИИ
ОБОБЩЕННОЕ ПРОГРАММИРОВАНИЕ С КОМБИНАТОРАМИ И ОБЪЕКТАМИ
Скриптовый язык «Link» для программирования сценариев исполняемых событийных систем
ФУНКЦИОНАЛЬНО-ИМПЕРАТИВНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ EL
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

THE INFLUENCE OF FUNCTIONAL PROGRAMMING ON MODERN PROGRAMMING LANGUAGES

The article is devoted to the study of the influence of functional programming on modern programming languages. The author substantiates the relevance and significance of the research topic. Modern programming languages have a large set of different tools and useful features that allow you to write completely different code in the same language for the same task. A programming paradigm is, first of all, a way of thinking — how the programmer thinks about representation and processing. In other words, the programming paradigm exists in the mind of the programmer; it is not part of the language. Different languages may support a particular paradigm to varying degrees. The article postulates that at present, functional programming has been a hot trend in software development since its earliest days, but has taken on a new meaning in the modern era. The concepts underlying functional programming are considered. It concludes that in the modern world, functional programming is experiencing a «renaissance» due to the fact that functional languages allow you to write declarative, understandable and reliable program code. Particular emphasis is placed on the position that the trend towards the study and implementation of the concepts of the functional paradigm exists in modern general-use programming languages, which makes most modern programming languages multi-paradigm. In general, the analysis of scientific literature led to the conclusion that programming languages are moving forward and actively developing, accumulating new, more and more advanced and convenient tools. Obviously, popular languages like Python and C++ are acquiring more and more features that have evolved from functional programming.

Текст научной работы на тему «ВЛИЯНИЕ ФУНКЦИОНАЛЬНОГО ПРОГРАММИРОВАНИЯ НА СОВРЕМЕННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ»

Влияние функционального программирования на современные языки программирования

Телегин Валентин Александрович

технический директор департамента мобильной разработки, ООО «Ростелеком Информационные Технологии», valentin.telegin.it@gmail.com

Статья посвящена исследованию влияния функционального программирования на современные языки программирования. Автором обосновывается актуальность и значимость темы исследования. Современные языки программирования обладают большим набором различных инструментов и полезных функций, которые позволяют писать совершенно другой код на том же языке, для одной и той же задачи. Парадигма программирования — это, в первую очередь, способ мышления — то, как программист думает о представлении и обработке. Другими словами, парадигма программирования существует в сознании программиста; она не является частью языка. Разные языки могут в разной степени поддерживать определенную парадигму. В статье постулируется о том, что в настоящее время, функциональное программирование было актуальным направлением в разработке программного обеспечения с самых ранних дней, но приобрело новое значение в современную эпоху. Рассматриваются концепции, лежащие в основе функционального программирования. Заключается о том, что в современном мире, функциональное программирование переживает «ренессанс» из-за того, что функциональные языки позволяют писать декларативный, понятный и надежный программный код. Особый акцент делается на положении о том, что тренд на изучение и имплемента-цию концепций функциональной парадигмы существует в современных языках программирования общего пользования, что делает большинство современных языков программирования — мультипарадиг-мальными. В целом, анализ научной литературы позволил сделать вывод о том, что языки программирования движутся вперед и активно развиваются, накапливая новые, все более совершенные и удобные инструменты. Очевидно, что популярные языки, такие как Python и С ++, приобретают все большее количество функций, которые произошли от функционального программирования. Ключевые слова: функциональное программирование, С++, Python, Haskell, параллельные вычисления, языки программирования, парадигмы программирования, лямбда-функция, монадический интерфейс, асинхронность, ленивая оценка.

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

Функции являются фундаментальными для организации кода; они существуют во всех языках программирования более высокого порядка. Как правило, функциональное программирование означает использование функций с наилучшим эффектом для создания чистого и поддерживаемого программного обеспечения. Более конкретно, функциональное программирование — это набор подходов к кодированию, обычно описываемых как парадигма программирования.

Функциональное программирование иногда определяется в противовес объектно-ориентированному программированию (ООП) и процедурному программированию. Это вводит в заблуждение, поскольку эти подходы не являются взаимоисключающими, и большинство систем, как правило, используют все три.

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

1. Функции современных языков ФП

1.1. Функции первого класса

Следует согласиться с мнением А.Э. Романовой о том, что язык программирования — это формальный язык, который необходим для написания разного рода компьютерных приложений, служб и драйверов [1]. Все языки программирования состоят из определенных компонентов и функций.

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

Так, к примеру, функции высшего порядка — это действия, которые либо принимает другую функцию в качестве аргумента, либо возвращает некоторую функцию в качестве результата. Их также называют функционалами. Такое поведение может быть реализовано даже в чистом C с помощью указателей на функции (см. рис. 1).

void update_user_balance(int user_id,

Парадигмы программирования: какие бывают и на что влияют

Что это такое? Парадигмы программирования – это набор правил и ограничений, которые используют в работе те или иные языки. Это не подробный стоп-лист, а скорее подходы к решению задач.

Какие бывают? Выделяют две основные парадигмы: императивную и декларативную. На их основе были разработаны языки программирования, часть из которых уже устарела, а другая до сих пор популярна.

В статье рассказывается:

  1. Понятие парадигмы программирования
  2. Что не относится к парадигме программирования
  3. Императивная парадигма программирования
  4. Декларативная парадигма программирования
  5. Сравнение парадигм программирования

Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.
Бесплатно от Geekbrains

Понятие парадигмы программирования

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

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

Что не относится к парадигме программирования

Стоит сразу отметить, что парадигма не является языком или инструментом. Ее можно назвать ориентиром, состоящим из набора образцов и принципов. Именно ими будет руководствоваться программист при написании кода. Данные правила сформулированы большим количеством разработчиков, которые придерживались их в своей работе.

Не все языки программирования привязаны к конкретным парадигмам. Однако некоторые формальные знаковые системы действительно были разработаны под определенные правила и принципы написания кода. К примеру, Haskel и функциональное программирование.

Отметим, что приемы из одной парадигмы могут использоваться совместно с приемами из другой.

Узнай, какие ИТ — профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов
Исполнительный директор Geekbrains

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

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains

Павел Симонов
Исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Получить подборку бесплатно
Уже скачали 25962

Есть так называемые многопарадигмальные языки, которые позволяют адаптировать код под различные парадигмы программирования. Например, Python и JavaScript.

Императивная парадигма программирования

Наиболее распространённой и простой парадигмой является императивный вариант. Её основное отличие заключается в последовательном выполнении операций.

Под эту парадигму заточено большое количество языков. Она имеет много видов.

Некоторое время назад практически все разработчики использовали процедурные языки. Однако теперь наиболее актуальным является современное объектно-ориентированное программирование (ООП). Именно такой стиль написания кода стал самой популярной разновидностью императивной парадигмы. Процедурное программирование применяется лишь в тех случаях, когда не может использоваться ООП.

Процедурное программирование

Языки: C, Pascal, COBOL, ALGOL, BASIC, Fortran и т.д.

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

Стоит отметить один важный нюанс. Процедура и функция являются синонимичными понятиями, однако функциональное и процедурное программирование — не одно и то же. В первом случае речь идёт о декларативной парадигме, а во втором — об императивной.

Рассмотрим ещё один пример. Когда человек сообщает официанту название напитка, который хочет получить, его вряд ли интересует, что должен будет сделать работник кафе. Ему важно получить конкретный результат. Примерно то же самое происходит и при вызове функции. Разработчику не нужно знать, что сделает функция для выполнения поставленной задачи. Необходимо лишь помнить название процедуры и технику ее использования.

Объектно-ориентированное программирование

Языки: Java, Python, C++, Ruby, C#, Objective-C, PHP и т.д.

Это наиболее популярная, простая и многофункциональная парадигма среди современных вариантов. В ней появляются объекты, которые могут самостоятельно выполнять те или иные функции.

С помощью объектно-ориентированного программирования разработчик может настраивать связи между частями программы, которые нацелены на выполнение разных операций. Это позволяет без труда разделять программу между специалистами. Кроме того, ПО становится проще поддерживать и автоматически тестировать.

ООП является наиболее простой современной парадигмой. Кроме того, в ней реализовано самое большое количество функций.

Декларативная парадигма программирования

Особенность декларативной парадигмы заключается в том, что разработчику необходимо сосредоточиться не на том, что нужно сделать, а на том, какой должен быть результат. После получения команд компьютер будет самостоятельно искать способ выполнения задачи. Следовательно, программисту нужно чётко сформулировать требуемый результат. В противном случае компьютер начнёт подбирать все доступные варианты решение задачи.

Что такое функциональное программирование?

В этой статье Владимир Хориков попытается ответить на вопрос: что такое функциональное программирование?

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

Итак, что такое функциональное программирование? Этот термин возникает довольно часто, и каждый автор, пишущий о нем, дает собственное объяснение. На взгляд автора оригинала, самым простым и в то же время точным определением является следующее: функциональное программирование — это программирование с математическими функциями.

Математические функции не являются методами в программном смысле. Хотя мы иногда используем слова «метод» и «функция» как синонимы, с точки зрения функционального программирования это разные понятия. Математическую функцию лучше всего рассматривать как канал (pipe), преобразующий любое значение, которое мы передаем, в другое значение:

Вот и все. Математическая функция не оставляет во внешнем мире никаких следов своего существования. Она делает только одно: находит соответствующий объект для каждого объекта, который мы ему скармливаем.

Для того чтобы метод стал математической функцией, он должен соответствовать двум требованиям. Прежде всего, он должен быть ссылочно прозрачным (referentially transparent). Ссылочно прозрачная функция всегда дает один и тот же результат, если вы предоставляете ей одни и те же аргументы. Это означает, что такая функция должна работать только со значениями, которые мы передаем, она не должна ссылаться на глобальное состояние.

public long TicksElapsedFrom(int year)

Этот метод не является ссылочно прозрачным, потому что он возвращает разные результаты, даже если мы передаем в него один и тот же год. Причина здесь в том, что он ссылается на глобальное свойство DatetTime.Now.

Ссылочно прозрачной альтернативой этому методу может быть (Эта версия работает только с переданными параметрами):

public long TicksElapsedFrom(int year, DateTime now)

Во-вторых, сигнатура математической функции должна передавать всю информацию о возможных входных значениях, которые она принимает, и о возможных результатах, которые она может дать. Можно называть эту черту честность сигнатуры метода (method signature honesty).

Посмотрите на этот пример кода:

public int Divide(int x, int y) < return x / y; >

Метод Divide, несмотря на то, что он ссылочно прозрачный, не является математической функцией. В его сигнатуре указано, что он принимает любые два целых числа и возвращает другое целое число. Но что произойдет, если мы передадим ему 1 и 0 в качестве входных параметров?

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

Чтобы преобразовать метод в математическую функцию, нам нужно изменить тип параметра «y», например:

public static int Divide(int x, NonZeroInteger y) < return x / y.Value; >

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

public static int ? Divide(int x, int y) < if (y == 0) return null; return x / y; >

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

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

Побочные эффекты (Side effects)

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

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

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

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

Исключения

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

Более того, исключения имеют семантику goto, что означает, что они позволяют легко переходить из любой точки вашей программы в блок catch. На самом деле, исключения работают еще хуже, потому что оператор goto не позволяет выходить за пределы определенного метода, тогда как с исключениями вы можете легко пересекать несколько уровней в своей базе кода.

Примитивная одержимость (Primitive Obsession)

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

public class User < public string Email < get; private set; >public User(string email) < if (email.Length >256) throw new ArgumentException("Email is too long"); if (!email.Contains("@")) throw new ArgumentException("Email is invalid"); Email = email; > > public class UserFactory < public User CreateUser(string email) < return new User(email); >>

Что нам говорит сигнатура метода CreateUser? Она говорит, что для любой входной строки он возвращает экземпляр User. Однако на практике он принимает только строки, отформатированные определенным образом, и выдает исключения, если это не так. Следовательно, этот метод нечестен, поскольку не передает достаточно информации о типах строк, с которыми работает.

По сути, это та же проблема, которую вы видели с методом Divide:

public int Divide(int x, int y) < return x / y; >

Тип параметра для электронной почты, а также тип параметра для «y» являются более грубыми, чем фактическая концепция, которую они представляют. Количество состояний, в которых может находиться экземпляр строкового типа, превышает количество допустимых состояний для правильно отформатированного электронного письма. Это несоответствие приводит к обману разработчика, который использует такой метод. Это заставляет программиста думать, что метод работает с примитивными строками, тогда как на самом деле эта строка представляет концепцию предметной области со своими инвариантами.

Как и в случае с методом Divide, нечестность можно исправить, введя отдельный класс Email и используя его вместо строки.

Nulls

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

Но тут, конечно, зависит от языка. Автор оригинала работает с C#, в котором до 8 версии нельзя было указывать является ли значение nullable (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types). Так как оригинал статьи 2016 года, на тот момент еще не было такой возможности в C#.

Фактически, в C # все ссылочные типы действуют как контейнер для двух типов значений. Один из них является экземпляром объявленного типа, а другой — null. И нет никакого способа провести различие между ними, поскольку эта функциональность встроена в сам язык. Вы всегда должны помнить, что, объявляя переменную ссылочного типа, вы фактически объявляете переменную пользовательского двойного типа, которая может содержать либо нулевую ссылку, либо фактический экземпляр:

В некоторых случаях это именно то, что вам нужно, но иногда вы хотите просто вернуть MyClass без возможности его преобразования в null. Проблема в том, что в C # это невозможно сделать. Невозможно различить ссылочные типы, допускающие значение NULL, и ссылочные типы, не допускающие значения NULL. Это означает, что методы со ссылочными типами в своей сигнатуре по своей сути нечестны.

Эту проблему можно решить, введя тип Maybe и соглашение внутри команды о том, что всякий раз, когда вы определяете переменную, допускающую значение NULL, вы используете для этого тип Maybe.

Почему функциональное программирование?

Важный вопрос, который приходит на ум, когда вы читаете о функциональном программировании: зачем вообще беспокоиться об этом?

Одной из самых больших проблем, возникающих при разработке корпоративного программного обеспечения, является сложность. Сложность кодовой базы, над которой мы работаем, является единственным наиболее важным фактором, влияющим на такие вещи, как скорость разработки, количество ошибок и способность быстро приспосабливаться к постоянно меняющимся потребностям рынка.

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

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

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

Имея честную сигнатуру метода, нам не нужно останавливаться на деталях реализации метода или обращаться к документации, чтобы узнать, есть ли что-то еще, что нам нужно учесть перед его использованием. Сама сигнатура сообщает нам, что может случиться после того, как мы вызовем такой метод. Модульное тестирование также становится намного проще. Все сводится к паре строк, в которых вы просто указываете входное значение и проверяете результат. Нет необходимости создавать сложные тестовые двойники, такие как mocks, и поддерживать их в дальнейшем.

Резюме

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

Практики, которые помогают преобразовать методы в математические функции:

  • Иммутабельность.
  • Избегать исключения для управления потоком программы.
  • Избавляться от примитивной одержимости.
  • Делать nulls явными.
  • программирование
  • функциональное программирование
  • проектирование

Функциональное программирование: что это такое, преимущества и недостатки

Функциональное программирование на сегодняшний день является одним из приоритетных направлений развития кода. Оно кардинально отличается от императивной, объектно-ориентированной парадигмы. К примеру, если в императивном подходе используются инструкции, то в функциональном – функции, набор правил, которые необходимо выполнять без строгой последовательности действий.

Haskell, Erlang, Clojur – яркие представители ФП. На другом берегу такие мастодонты, как C++, Java. Конечно, принципы первой группы языков применимы далеко не везде, однако в своих сферах они практически незаменимы. О том, что такое функциональное программирование, вы узнаете из нашего материала.

Что такое функциональные системы программирования

Практически каждый программист первым делом изучал объектно-ориентированную методологию разработок. Обычно вхождение в эту специальность предполагает знакомство с языками Java или C++, а в лучшем случае Ruby, Python или C#. Такой разработчик уже точно будет иметь представление о классах, объектах и т.д. Но вот основы функционального программирования, скорее всего, ему еще не будут знакомы. Эта парадигма существенно отличается не только от объектно-ориентированного подхода, но и от других методологий (процедурная, прототипно-ориентированная и др.).

Функциональное программирование становится все более востребованным. Это обусловлено рядом факторов. Нельзя сказать, что это новая парадигма. Так, еще в девяностых годах появился язык программирования Haskell, который и сейчас активно используется для ФП. В эту же категорию могут быть отнесены также Erlang, Scala, Clojure. Все подобные языки программирования объединяет одно очень важное преимущество. С их помощью можно писать конкурентные программные продукты, поэтому при их использовании отпадают такие проблемы, как взаимные блокировки и потокобезопасность.

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

Узнай, какие ИТ — профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов
Исполнительный директор Geekbrains

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

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains

Павел Симонов
Исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Получить подборку бесплатно
Уже скачали 25958

К примеру, в объектно-ориентированном программировании разработчик должен задать объекты и описать алгоритмы их взаимодействия друг с другом, но, при этом, есть возможность для написания кода, не связанного с ними. Такой код выглядит обособленным и оказывает влияние на работу всей программы. Он направляет некоторые объекты для взаимодействия между собой, осуществляет обработку определенных результатов и т.д.

Функциональная парадигма в этом плане продвинулась глубже. При таком программировании код описывает правила работы с данными. Разработчик лишь формирует необходимые условия, а код уже непосредственно определяет их практическое применение.

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

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

Сравнение императивного и функционального программирования

Можно решить, что термин «функциональный стиль программирования» говорит о функциях.

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

Для наглядности рассмотрим ситуацию с открытием кафе. Здесь предусмотрено наличие таких типов работников, как повара и администраторы.

Поварам необходимо предоставить пошаговую инструкцию по приготовлению каждого блюда. К примеру:

  1. Наполнить кастрюлю водой.
  2. Разместить кастрюлю на плите и установить определенную температуру нагрева.
  3. Посолить воду в кастрюле с использованием нужного количества соли.
  4. При приготовлении 10 порций, нужно использовать 1 свеклу, для 20 порций – 2 две свёклы и т.д.
  5. Почистить всю отобранную свеклу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *