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

Среди многих парадигм программированияфункциональное программирование в течение последних 60 лет занимало довольно узкую нишу. Хотя разработчики игр , такие как поисковый алгоритм Google, полагаются на его очень ключевые концепции, средний программист сегодня почти ничего не знает об этом. До недавнего времени объектно-ориентированное программирование всегда брало верх—и функциональное программирование оставалось позади. Несмотря на свою красоту и применимость.

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

Поэтому неудивительно, что такие популярные языки, как Java и Python, перенимают все больше концепций функционального программирования. Другие языки. Такие как Haskell, почти полностью функциональны.

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

Функция без явного ввода гарантированно имеет побочный эффект. Так как каждая функция нуждается в некотором вводе.

 

В отличие от этого. Объектно-ориентированное программирование предполагает наличие относительно фиксированного набора функций и изменение или добавление новых переменных. Это полезно для относительно небольших наборов данных. Но может быстро выйти из-под контроля по мере увеличения объема данных.

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

Однако полезно знать об основных принципах, чтобы при необходимости использовать их в своих интересах.

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

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

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

  • Локальность: Отсутствие разделения данных от функций означает. Что данные потенциально распределены по всему исходному коду. Отделив его, можно поместить все данные в несколько входных файлов.

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

  • Своевременность: Поскольку функции в функциональном программировании не меняют состояния, легче определить. Когда данные известны. Будь то во время написания кода. Когда он начинает выполняться. Во время выполнения или когда он закончен. Это помогает сохранить общий обзор данных и облегчает отладку.
  • Структура: Само собой разумеется, что легче получить больше структуры в коде, если вы отделяете данные. Это не означает. Что объектно-ориентированное программирование неструктурировано; скорее. Проще создать четкий исходный код. Следуя четким рекомендациям. Которые накладывают минимум структуры.

    Это также облегчает ведение общего обзора всех функций.

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

Откройте для себя больше сети: Новая оригинальная серия от HPE

 

Функциональное программирование-это написание чистых функций

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

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

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

Эти языки видят тенденцию (или нет)

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

Perl

В отличие от других языков, Perl охватывает побочные эффекты, а не обескураживает их.

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

Вперед

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

Ява

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

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

Быстрый

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

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

Семейство С

Поскольку C является процедурным языком, он не поддерживает функциональное программирование изначально. Однако существуют пакеты, такие как FFCALL, которые поддерживают некоторые элементы функционального программирования. Такие как лямбда-выражения. Аналогичным образом, Objective-C является императивным языком. Который делает функциональный код практически невозможным для реализации.

C++ поддерживает лямбда-выражения более простым способом, начиная с

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

язык JavaScript

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

PHP

Подобно JavaScript. PHP является многопарадигмальным языком и имеет встроенную поддержку некоторых ключевых понятий. Таких как рекурсии и функции. Которые принимают или возвращают другие функции. Разработчики, которые в любом случае используют PHP, возможно. Захотят рассмотреть возможность использования этих концепций.

Рубин

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

Scala

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

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

Питон

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

Clojure

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

Хаскелл

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

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

Несмотря на то. Что функциональное программирование имеет много недостатков. Повсеместность объектно-ориентированного программирования указывает на то. Что функциональное не является концом истории. Давайте посмотрим правде в глаза: некоторые из достоинств функционального программирования также являются его самыми большими недостатками:

  • Отсутствие ввода-вывода: Одна из наиболее практичных особенностей нефункционального программирования (включая объектно-ориентированное программирование) заключается в том. Что вы можете обрабатывать пользовательские входные данные и записывать выходные данные на экран. Однако ввод-вывод — это фундаментальный побочный эффект. Поэтому, если вы хотите написать чисто функциональный код, вам придется смириться с тем фактом. Что ввод-вывод невозможен. Или найти довольно сложный обходной путь.
  • Рекурсии и использование памяти: Одной из ключевых особенностей функционального программирования является то. Что циклы абстрагируются и заменяются рекурсиями. Поскольку эти рекурсии всегда создают новые объекты вместо того, чтобы манипулировать старыми. Это может привести к довольно высокому использованию памяти. Есть относительно простые обходные пути вокруг этой проблемы, но новички, в частности. Могут испытывать искушение изначально злоупотреблять памятью.
  • Никакого дружелюбия к новичкам: Функциональное программирование непосредственно заимствовано из математики и, как таковое. Заряжено большим количеством специального жаргона. Доказательств и теорем. Это может напугать новичков. И хотя в принципе можно доказать, что функциональная программа верна. На практике эти доказательства довольно длинны и становятся почти невозможными для понимания. Когда программа большая.
  • Несмотря на то. Что существуют довольно оживленные форумы для Haskell. Scala и других языков. Сообщество объектно-ориентированного программирования в десятки раз больше. Поэтому гораздо труднее найти решение проблем, просматривая Переполнение стека или связанные с ним форумы. А также спрашивая коллегу.

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

Большие данные приходят. И они приносят друга: функциональное программирование

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

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

Несмотря на то. Что это старая парадигма. Имеет смысл. Что функциональное программирование сейчас набирает обороты: среди прочего. Оно отлично подходит для больших баз данных. Параллельного программирования и машинного обучения. И все эти области бурно развивались в течение последнего десятилетия.

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

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

  • Функциональное программирование может повысить надежность программного обеспечения там. Где это практически возможно.
  • Иногда лучше всего менять языки программирования и парадигмы в зависимости от характера приложения.
  • Старые идеи. Такие как функциональное программирование. Могут обрести новое значение по мере изменения технического ландшафта.

Похожие:

Эта статья/содержание была написана отдельным автором и не обязательно отражает точку зрения компании Hewlett Packard Enterprise.