functional

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

Наши соц. сети: instagram, fb, tg

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

1. Чистые функции

2. Неизменяемость

3. Отказ от циклов

4. Функции высшего порядка

1. Чистые функции

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


function getSquare(x) {
 return x*x
}
getSquare(8)
// 64

2. Неизменяемость

Неизменяемый объект - это объект, состояние которого не может быть изменено после его создания в JavaScript, неизменяемые объекты не меняют значения при их использовании:


const firstArr = [1, 2, 3, 4, 5]

const secondArr = firstArr.slice().reverse()

// исходный массив firstArr остался тем же

// если нужно производить обработку, мы копируем массив


Вот почему константа так широко используется в JavaScript: это обеспечивает неизменность переменных.

3. Отказ от циклов

JavaScript предоставляет способы избежать использования циклов. Чаще всего заменить циклы позволяют функции высшего порядка: filter, map и reduce:

map

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


var myNumbs = [4, 25, 49];

var roots = numbers.map(Math.sqrt);

// теперь roots равен [2, 5, 7], а numbers всё ещё равен [4, 25, 49]


reduce

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


const array1 = [1, 2, 3, 4];

const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4

console.log(array1.reduce(reducer));

// 10

// 5 + 1 + 2 + 3 + 4

console.log(array1.reduce(reducer, 5));

// 5


filter

filter создает новый массив с элементами, которые удовлетворяют заданному условию из существующего массива. Аргумент является ссылкой на текущий элемент в массиве, поскольку filter проверяет его на соответствие условию. Это полезно для доступа к свойствам в случае объектов. Если текущий элемент проходит условие, он отправляется в новый массив.


const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);

// ["exuberant", "destruction", "present"]


4.Функции высшего порядка

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



const users = [
  { name: 'Vladimir', age: 28 },
  { name: 'Ivan', age: 40 },
  { name: 'Sergey', age: 21 },
  { name: 'Alexey', age: 34 },
];
 
users
  .filter((user) => user.age >= 36)
  .map((user) => `${user.name} is ${user.age} years old`)
  .join('\n');
let olderUsers = users.filter((user) => user.age >= 36)
  .map((user) => `${user.name} is ${user.age} years old`)
  .join('\n');
 
console.log(olderUsers);
// Ivan is 40 years old

Приятного кодинга!

©2019