Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

6. Практические применение методов функционального программирования ? кратко

Лекция



Привет, Вы узнаете о том , что такое 6. Практические применение методов функционального программирования ?, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое 6. Практические применение методов функционального программирования ? , настоятельно рекомендую прочитать все из категории Функциональное программирование.

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

Для чего нужно знания о функциональном программировании, какое его назначение, И что теперь?

6. Практические применение методов функционального программирования ?

Теперь, когда вы изучили весь этот новый замечательный материал, вы, возможно, подумаете: «И что теперь? Как мне использовать это в моем обычном коде?».

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

Если же вы умеете программировать только на императивном языке типа JavaScript (на уровне, которым мы все должны владеть), тогда вы можете продолжить использовать все, что уже изучили, но теперь дисциплинируя себя.

Возможности Многофункционального JavaScript

6. Практические применение методов функционального программирования ?

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

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

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

Итак. что такое неизменяемость? В ES2015 или ES6, как он еще называется, появилось новое ключевое слово для объявления переменных — const. Оно означает, что если переменная была установлена однажды, она не может быть переопределена:

const a = 222;
a = 111; // выбросит TypeError 

Здесь a определена как константа и по этой причине не может быть изменена после установки. Вот почему выражение a = 111 выбрасывает ошибку.

Проблема const в том, что в JavaScript она не заходит в своей идее так далеко, как должна. Следующий пример проиллюстрирует ее предел:

const a = {
    x: 1,
    y: 2
};
a.x = 2222; // НЕТ ИСКЛЮЧЕНИЯ!
a = {}; // а вот это выбросит TypeError

Заметьте, что a.x = 2222 НЕ выбрасывает исключения. Единственное значение, остающееся неизменяемым с const – это сама переменная a. Все, что a в себе определяет, может быть изменено.

Это ужасное разочарование, потому что отсутствие такого недостатка сделало бы JavaScript гораздо лучше.

Как же мы можем достичь полной неизменяемости в JavaScript?

К сожалению, это возможно только с помощью библиотеки Immutable.js. Она должна дать нам должный уровень неизменяемости, но, увы, ее использование также сделает наш код больше похожим на Java, чем на JavaScript.

Понятия Каррирование и композиция и его применение в ФП

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

const f = a => b => c => d => a + b + c + d;

Обратите внимание, что нам пришлось написать каррированный фрагмент функции вручную.

И, чтобы вызвать f, мы должны написать:

console.log(f(1)(2)(3)(4)); // выведет 10

Но круглых скобок здесь достаточно, чтобы заставить плакать Lisp-программиста.

Существует множество библиотек, облегчающих задачу каррирования. Об этом говорит сайт https://intellect.icu . Одна из моих любимых — Ramda.

Использование Ramda теперь позволяет нам написать:

const f = R.curry((a, b, c, d) => a + b + c + d);
console.log(f(1, 2, 3, 4)); // выведет 10
console.log(f(1, 2)(3, 4)); // также выведет 10
console.log(f(1)(2)(3, 4)); // также выведет 10

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

Используя Ramda, мы можем переписать функцию mult5AfterAdd10 из Части 3 и Части 4:

const add = R.curry((x, y) => x + y);
const mult5 = value => value * 5;
const mult5AfterAdd10 = R.compose(mult5, add(10));

Пример показывает, что Ramda имеет множество вспомогательных функций для выполнения подобных задач, к примеру R.add и R.multiply, что означает для нас меньшее количество кода:

const mult5AfterAdd10 = R.compose(R.multiply(5), R.add(10));

Функции - map, filter, reduce

Ramda также имеет свои собственные версии map, filter и reduce. Несмотря на то, что эти функции находятся в Array.prototype в нативном JavaScript, их версии в Ramda каррированные:

const isOdd = R.flip(R.modulo)(2);
const onlyOdd = R.filter(isOdd);
const isEven = R.complement(isOdd);
const onlyEven = R.filter(isEven);const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(onlyEven(numbers)); // выводит [2, 4, 6, 8]
console.log(onlyOdd(numbers)); // выводит [1, 3, 5, 7]

R.modulo принимает два параметра. Первый – это делимое (то, что мы делим), второй – делитель (то, на что мы делим).

Функция isOdd возвращает остаток от деления на два. При остатке от нуля четного числа возвращается ложь, при остатке от единицы нечетного числа – истина. Мы перебросили (прим. пер., flip) первый и второй параметр из modulo, поэтому смогли установить 2, как делитель.

Функция isEven – просто обратная (прим. пер., complement) версия isOdd.

Функция onlyOdd – фильтрующая функция с предикатом (функцией, возвращающей булево значение) isOdd. Перед выполнением она ожидает последнее значение в переданном списке чисел.

Функция onlyEven – фильтр, использующий isEven в качестве предиката.

Когда мы передаем number в onlyEven и в onlyOdd, isEven и isOdd получают свои последние параметры и могут наконец-то выполниться, возвратив ожидаемые числа.

Какие есть Недостатки JavaScript?

6. Практические применение методов функционального программирования ?

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

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

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

Одним из первым таких языков был CoffeeScript. Сейчас на вооружение Angular 2 (прим. пер., «сейчас» актуально для Angular 5) был принят TypeScript. Транспилятором для JavaScript является Babel.

Все больше и больше людей прибегают к такому подходу в продакшене.

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

Язык программирования Elm

6. Практические применение методов функционального программирования ?

В серии статей мы обращались к Elm, чтобы лучше понять функциональное программирование.

Но что такое Elm? И как мне использовать его?

Elm — это чистый функциональный язык, компилируемый в JavaScript, поэтому вы можете использовать его для создания веб-приложений, используя The Elm Architecture, также называемую TEA (эта архитектура вдохновила разработчиков Redux).

У приложений, написанных на Elm, НЕ возникает никаких ошибок выполнения.

Elm используется в продакшене такими компаниями, как NoRedInk, где Эван Чаплики, создатель Elm, сейчас работает (раньше он работал в Prezi).

Послушайте монолог 6 Months of Elm in Production от Ричарда Фельдмана, Elm-евангелиста из NoRedInk, для более подробной информации.

Должен ли я заменить весь свой JavaScript на Elm?

Нет. Вы можете постепенно заменять части кода. Чтобы узнать побольше, загляните в статью How to use Elm at Work из блога Elm.

Зачем учить Elm?

  1. Программирование на чистом функциональном языке несет в себе одновременно ограничение и освобождение. Ограничение заключается в ограничении ваших действий (зачастую, это защита вас от вас самих), но в тоже время вы освобождаетесь от ошибок и плохих архитектурных решений, так как Elm-приложения следуют The Elm Architecture, функционально-реактивной модели.
  2. Функциональное программирование усовершенствует ваши навыки программиста. Все вышеупомянутые идеи — лишь верхушка айсберга. Вам действительно стоит увидеть их практическую реализацию, чтобы оценить насколько ваши программы уменьшатся в размере и вырастут в показателях стабильности.
  3. JavaScript был изначально написан за десять дней и затем пропатчен в течение двух следующих десятков дней, чтобы превратиться в немного функциональный, немного объектно-ориентированный и полноценный императивный язык программирования. Elm был разработан с учетом накопленного за тридцать лет опыта развития Haskell-сообщества, опирающегося на десятилетия работы в области математики и информатики. The Elm Architecture (TEA) планировалась и улучшалась на протяжении многих лет и стала результатом личного достижения Эвана в функциональном реактивном программировании. Посмотрите Controlling Time and Space, чтобы оценить уровень мышления, сформулировавшего эту архитектуру.
  4. Elm был задуман для фронтенд-разработчиков. Он стремится сделать их жизнь проще. Посмотрите Let’s Be Mainstream, чтобы лучше понимать эту цель.

Будущее функционального программирования

6. Практические применение методов функционального программирования ?

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

Произойдет окончательный переход к языкам, компилируемым в JavaScript.

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

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

Центральные процессоры не станут работать быстрее, но количество ядер будет продолжать расти.

Изменяющееся состояние будет осмысленно, как одна из основных проблем сложных систем.

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

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

После прочтения этих статей, вы должны быть более уверенными в своих способностях и понимания идеий ФП.

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

создано: 2020-08-12
обновлено: 2021-03-13
3



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

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

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