Краткое вступление в функциональное реактивное программирование (FRP)

1656662768 kratkoe vstuplenie v funkczionalnoe reaktivnoe programmirovanie frp

от Navdeep Singh

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

zmvecVovUlqx5GTj1gMqLVhLKHEiES7Fy42x
FRP: реагирование на события

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

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

Вот пример:

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]var numbersLessThanFive = [Int]()for index in 0..<numbers.count     {    if numbers[index] < 5         {        numbersLessThanFive.append(numbers[index])        }    }

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

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

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

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

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

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]let numbersLessThanFive = numbers.filter { $0 < 5 }

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

Обратите внимание на объявление двух массивов в обоих примерах.

В первом примере numbersLessThanFive массив был объявлен как a varтогда как во втором примере тот же массив был объявлен как a let.

Это звонит в колокола?

Какой подход лучше, с каким массивом безопаснее работать?

Что делать, если несколько потоков пытаются работать с тем же массивом и его элементами?

Разве постоянный массив не надежнее?

Реактивное программирование

Реактивное программирование – это практика программирования с асинхронными потоками данных или потоками событий. Ан поток событий может быть что угодно, например ввод с клавиатуры, нажатие кнопок, жесты, обновление GPS, акселерометр и iBeacon. Вы можете слушать поток и реагировать на него соответственно.

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

var twoDimensionalArray = [ [1, 2], [3, 4], [5, 6] ]let flatArray = twoDimensionalArray.flatMap { array in    return array.map { integer in        return integer * 2    }}print(flatArray)Output : [2, 4, 6, 8, 10, 12]

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

Однако более важный вопрос все еще остается без ответа. Что такое функциональное реактивное программирование (FRP)?

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

В следующем блоге я расскажу об основных строительных блоках реактивного программирования – а пока оставайтесь с обновлениями и наслаждайтесь чтением 🙂

Чтобы хорошо понять реактивные концепции и писать программы для iOS в RxSwift, можно прочитать мою книгу: Реактивное программирование в Swift 4.

Больше моих проектов и кода для загрузки есть в моих общедоступных хранилищах github

Подробнее о теме можно прочитать здесь

Спасибо за прочтение, поделитесь им, если вы нашли это полезным 🙂

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

Ваш адрес email не будет опубликован.