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

расшифровка, казалось бы, сложной концепции

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

Куда бы вы ни пошли, все кажется объектом, но это не всегда так.

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

Итак, это возвращает меня к вопросу: что такого особенного в функциональном программировании?

Все они просто шаблоны

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

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

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

Шаблоны решают определенный набор проблем, и со временем мы пришли к пониманию и принятию того, что не все является объектом, и могут быть более эффективные способы написания кода.

Понимание декларативных шаблонов

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

Start.
Check initial state of door.
If door is closed, reach out to door handle and turn. 
Remember new state, otherwise continue. 
Walk through doorway. 
Close door. 
End.

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

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

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

1 + 2 + 3 + 4 + 5 = 15
2 + 4 + 5 + 3 + 1 = 15
(3 x 5 x 8) + 12 - 5 + (2 x 5) = 137
(5 x 2) - 5 + 12 + (5 x 3 x 8) = 137

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

Problem: I want to change this creature (input) chicken into a (output) cow.
Apply 4 legs
Lengthen legs
Remove outer coat and replace with white cow hide
Give creature black spots
Increase creature size
Change noise to 'moo'
Modify creature face and replace with cow snout

Прощай, состояние!

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

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

Давайте взглянем на приведенный ниже код.

let ticketSales = [
   {name:'Twenty One Pilots', isActive: true, tickets:430}, 
   {name:'The Wiggles Reunion', isActive: true, tickets:257},
   {name:'Elton John', isActive: false, tickets:670}
]
/*using imperative*/
let activeConcerts = [];
for (let i = 0; i < ticketSales.length; i++){
    let t = ticketSales[i]; 
    if(t.isActive){ 
    activeConcerts.push(t)
  }
}

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

/*using declarative style of coding using the same data*/
let activeConcerts = [];
activeConcerts = (ticketSales.filter((t)=>{
   return t.isActive;
}))

В обоих примерах используется один и тот же набор данных, но они обрабатываются по-разному. В JavaScript есть несколько методов Array, которые позволяют функциональное программирование (find, map, reduce, every, some) и, следовательно, уменьшают общую сложность кода.

Заключительные слова

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

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

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

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

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

Афинья