0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Что это такое</a><ul><li><a>Что умеют</a></li>
1
<ul><li><a>Что это такое</a><ul><li><a>Что умеют</a></li>
2
</ul></li>
2
</ul></li>
3
<li><a>Функциональное программирование - это…</a></li>
3
<li><a>Функциональное программирование - это…</a></li>
4
<li><a>Первый класс</a></li>
4
<li><a>Первый класс</a></li>
5
<li><a>Высший порядок</a></li>
5
<li><a>Высший порядок</a></li>
6
<li><a>Примеры в действии</a><ul><li><a>Array.prototype.map</a><ul><li><a>Образец кода</a></li>
6
<li><a>Примеры в действии</a><ul><li><a>Array.prototype.map</a><ul><li><a>Образец кода</a></li>
7
</ul></li>
7
</ul></li>
8
<li><a>Array.prototype.filter</a></li>
8
<li><a>Array.prototype.filter</a></li>
9
<li><a>Array.prototype.ruduce</a></li>
9
<li><a>Array.prototype.ruduce</a></li>
10
</ul></li>
10
</ul></li>
11
<li><a>Задание собственной "операции"</a></li>
11
<li><a>Задание собственной "операции"</a></li>
12
<li><a>Быстрое изучение темы</a></li>
12
<li><a>Быстрое изучение темы</a></li>
13
</ul><p>Создавать программное обеспечение можно на совершенно разных языках разработки. Каждый из них имеет свои особенности. А еще - поддерживаются определенные парадигмы разработки.</p>
13
</ul><p>Создавать программное обеспечение можно на совершенно разных языках разработки. Каждый из них имеет свои особенности. А еще - поддерживаются определенные парадигмы разработки.</p>
14
<p>Для некоторых приложений до сих пор популярностью пользуется функциональное программирование. Пример - JavaScript. Данный язык разработки подходит для написания веб-контента. Он пользуется в 2022 году огромным спросом как у новичков, так и у продвинутых программистов.</p>
14
<p>Для некоторых приложений до сих пор популярностью пользуется функциональное программирование. Пример - JavaScript. Данный язык разработки подходит для написания веб-контента. Он пользуется в 2022 году огромным спросом как у новичков, так и у продвинутых программистов.</p>
15
<p>В данной статье будет рассказано о функциональном программировании и функциях высшего порядка. Информация пригодится всем, кто планирует активно изучать JavaScript.</p>
15
<p>В данной статье будет рассказано о функциональном программировании и функциях высшего порядка. Информация пригодится всем, кто планирует активно изучать JavaScript.</p>
16
<h2>Что это такое</h2>
16
<h2>Что это такое</h2>
17
<p>Функция - это блок кода, который отвечает за выполнение тех или иных операций. Может определять входные параметры, которые позволяют вызывающим объектам передавать те или иные аргументы.</p>
17
<p>Функция - это блок кода, который отвечает за выполнение тех или иных операций. Может определять входные параметры, которые позволяют вызывающим объектам передавать те или иные аргументы.</p>
18
<p>Функция - это объект или подпрограмма. Она будет возвращать некоторое значение, даже пустое. Если функция возвращает последний упомянутый элемент, она будет носить название процедуры. В некоторых языках программирования объявление функций и процедур синтаксически различаются. Для этого применяются так называемые ключевые слова.</p>
18
<p>Функция - это объект или подпрограмма. Она будет возвращать некоторое значение, даже пустое. Если функция возвращает последний упомянутый элемент, она будет носить название процедуры. В некоторых языках программирования объявление функций и процедур синтаксически различаются. Для этого применяются так называемые ключевые слова.</p>
19
<p>Функции должны быть:</p>
19
<p>Функции должны быть:</p>
20
<ul><li>определены специальным образом;</li>
20
<ul><li>определены специальным образом;</li>
21
<li>объявлены в исходном коде.</li>
21
<li>объявлены в исходном коде.</li>
22
</ul><p>Функция высшего порядка - функция, которая принимает в виде аргументов другие функции. Может при возвращать иные подпрограммы в виде результата. Основная идея "высших операций" заключается в том, что у них точно такой же статус, как и у иных объектов информации. При применении "высшего порядка" можно получать на выходе абстрактные и компактные приложения, несмотря на сложность производимых ими вычислений и расчетов.</p>
22
</ul><p>Функция высшего порядка - функция, которая принимает в виде аргументов другие функции. Может при возвращать иные подпрограммы в виде результата. Основная идея "высших операций" заключается в том, что у них точно такой же статус, как и у иных объектов информации. При применении "высшего порядка" можно получать на выходе абстрактные и компактные приложения, несмотря на сложность производимых ими вычислений и расчетов.</p>
23
<h3>Что умеют</h3>
23
<h3>Что умеют</h3>
24
<p>В JavaScript функции могут:</p>
24
<p>В JavaScript функции могут:</p>
25
<ul><li>храниться в заданных программистом переменных, а также объектах и массивах;</li>
25
<ul><li>храниться в заданных программистом переменных, а также объектах и массивах;</li>
26
<li>передаваться в виде аргументов в иные функции;</li>
26
<li>передаваться в виде аргументов в иные функции;</li>
27
<li>возвращаться для других подпрограмм (в случае с высшим порядком).</li>
27
<li>возвращаться для других подпрограмм (в случае с высшим порядком).</li>
28
</ul><p>Стоит обратить внимание на то, что подпрограммы, которые обладают соответствующими свойствами и возможностями, носят название функций первого класса.</p>
28
</ul><p>Стоит обратить внимание на то, что подпрограммы, которые обладают соответствующими свойствами и возможностями, носят название функций первого класса.</p>
29
<h2>Функциональное программирование - это…</h2>
29
<h2>Функциональное программирование - это…</h2>
30
<p>Функциональное программирование - один из способов создания программного кода. Операции в нем базируются на функциях разного характера. Именно здесь используется "высший порядок" подпрограмм.</p>
30
<p>Функциональное программирование - один из способов создания программного кода. Операции в нем базируются на функциях разного характера. Именно здесь используется "высший порядок" подпрограмм.</p>
31
<p>Функциональная разработка - полное противопоставление императивной. Вычисления тут трактуются как расчеты значений функций в математическом понимании, а не в виде подпрограмм (как в процедурном программировании).</p>
31
<p>Функциональная разработка - полное противопоставление императивной. Вычисления тут трактуются как расчеты значений функций в математическом понимании, а не в виде подпрограмм (как в процедурном программировании).</p>
32
<p>Здесь предполагаются вычисления результатов в зависимости от исходных данных и полученных значений в ходе обработки иных функций. Явное хранение состояния приложения не предусматривается. Сюда же можно отнести изменяемость соответствующего состояния.</p>
32
<p>Здесь предполагаются вычисления результатов в зависимости от исходных данных и полученных значений в ходе обработки иных функций. Явное хранение состояния приложения не предусматривается. Сюда же можно отнести изменяемость соответствующего состояния.</p>
33
<h2>Первый класс</h2>
33
<h2>Первый класс</h2>
34
<p>При изучении функций высшего порядка, сначала необходимо рассмотреть "первый класс". В JavaScript функции являются объектами. К первому классу они относятся, если обладают перечисленными выше свойствами.</p>
34
<p>При изучении функций высшего порядка, сначала необходимо рассмотреть "первый класс". В JavaScript функции являются объектами. К первому классу они относятся, если обладают перечисленными выше свойствами.</p>
35
<p>Функция первого класса - специальный тип объектов, который позволяет формализовать за счет средств языка определенную логику поведения и обработки данных. Его можно:</p>
35
<p>Функция первого класса - специальный тип объектов, который позволяет формализовать за счет средств языка определенную логику поведения и обработки данных. Его можно:</p>
36
<ul><li>задавать в виде значения переменной;</li>
36
<ul><li>задавать в виде значения переменной;</li>
37
<li>передавать;</li>
37
<li>передавать;</li>
38
<li>возвращать по ссылке подобно иным переменным.</li>
38
<li>возвращать по ссылке подобно иным переменным.</li>
39
</ul><p>Такие функции являются Function-объектами. В JavaScript выглядят так:</p>
39
</ul><p>Такие функции являются Function-объектами. В JavaScript выглядят так:</p>
40
<p>Для того, чтобы доказать, что рассматриваемый компонент - это объект, можно использовать такую запись:</p>
40
<p>Для того, чтобы доказать, что рассматриваемый компонент - это объект, можно использовать такую запись:</p>
41
<p>Это - валидный код, который на практике лучше не использовать. Случайные свойства функциональным объектам обычно не присваиваются. Делается это непосредственно через объекты.</p>
41
<p>Это - валидный код, который на практике лучше не использовать. Случайные свойства функциональным объектам обычно не присваиваются. Делается это непосредственно через объекты.</p>
42
<p>В JS можно с функциями делать то же самое, что и с другими типами: объектами, числами, строками. А именно:</p>
42
<p>В JS можно с функциями делать то же самое, что и с другими типами: объектами, числами, строками. А именно:</p>
43
<ul><li>пользоваться обратным вызовом (передавать их в качестве параметров другим функциям);</li>
43
<ul><li>пользоваться обратным вызовом (передавать их в качестве параметров другим функциям);</li>
44
<li>присваивать их переменным;</li>
44
<li>присваивать их переменным;</li>
45
<li>передавать далее программному коду.</li>
45
<li>передавать далее программному коду.</li>
46
</ul><p>За счет этого изученный элемент относится к первому порядку.</p>
46
</ul><p>За счет этого изученный элемент относится к первому порядку.</p>
47
<h2>Высший порядок</h2>
47
<h2>Высший порядок</h2>
48
<p>Теперь можно изучить функции высшего порядка более подробно. Они оперируют иными "подпрограммами". "Операция" высшего порядка принимает функцию в виде аргумента, а затем производит ее возврат.</p>
48
<p>Теперь можно изучить функции высшего порядка более подробно. Они оперируют иными "подпрограммами". "Операция" высшего порядка принимает функцию в виде аргумента, а затем производит ее возврат.</p>
49
<p>Соответствующий элемент в программном коде - это функции, которые принимают функции в качестве аргумента или возвращают их при выводе на экран. За счет них JavaScript подходит для функциональной разработки.</p>
49
<p>Соответствующий элемент в программном коде - это функции, которые принимают функции в качестве аргумента или возвращают их при выводе на экран. За счет них JavaScript подходит для функциональной разработки.</p>
50
<p>В математике "операции" высшего порядка - это функционалы или операторы. Дифференциальный оператор здесь является самым распространенным примером. Он отображает рассматриваемый элемент в виде производной, которая также выступает функцией.</p>
50
<p>В математике "операции" высшего порядка - это функционалы или операторы. Дифференциальный оператор здесь является самым распространенным примером. Он отображает рассматриваемый элемент в виде производной, которая также выступает функцией.</p>
51
<p>Пример "операций" высшего порядка map (Array.prototype.map), а также Array.prototype.filter и Array.prototype.reduce. Все это встроено в JavaScript по умолчанию.</p>
51
<p>Пример "операций" высшего порядка map (Array.prototype.map), а также Array.prototype.filter и Array.prototype.reduce. Все это встроено в JavaScript по умолчанию.</p>
52
<h2>Примеры в действии</h2>
52
<h2>Примеры в действии</h2>
53
<p>Для того, чтобы лучше разбираться в функциях высшего порядка и их работе, стоит изучить перечисленные методы более подробно. Рассматривать будем наглядные примеры кодов, которые работают без изучаемого компонента и с ним. Эта информация поможет лучше изучить функции порядка типа "высший".</p>
53
<p>Для того, чтобы лучше разбираться в функциях высшего порядка и их работе, стоит изучить перечисленные методы более подробно. Рассматривать будем наглядные примеры кодов, которые работают без изучаемого компонента и с ним. Эта информация поможет лучше изучить функции порядка типа "высший".</p>
54
<h3>Array.prototype.map</h3>
54
<h3>Array.prototype.map</h3>
55
<p>Метод map:</p>
55
<p>Метод map:</p>
56
<ul><li>создает новый массив;</li>
56
<ul><li>создает новый массив;</li>
57
<li>формирует массив через вызов callback-функции;</li>
57
<li>формирует массив через вызов callback-функции;</li>
58
<li>callback-функция указывается в виде аргумента для каждого элемента входного массива;</li>
58
<li>callback-функция указывается в виде аргумента для каждого элемента входного массива;</li>
59
<li>берет каждое возвращенное значение от callback и создает новые массив, используя соответствующие значения.</li>
59
<li>берет каждое возвращенное значение от callback и создает новые массив, используя соответствующие значения.</li>
60
</ul><p>Callback-операция, передаваемая в метод map, принимает несколько аргументов. Всего их 3 - index, array, element.</p>
60
</ul><p>Callback-операция, передаваемая в метод map, принимает несколько аргументов. Всего их 3 - index, array, element.</p>
61
<h4><em>Образец кода</em></h4>
61
<h4><em>Образец кода</em></h4>
62
<p>Чтобы лучше понимать принцип работы функций порядка типа "высший", нужно изучить наглядные примеры. Пусть есть массив чисел. Нужно создать новое "упорядоченное множество", которое содержит удвоенные значения первого.</p>
62
<p>Чтобы лучше понимать принцип работы функций порядка типа "высший", нужно изучить наглядные примеры. Пусть есть массив чисел. Нужно создать новое "упорядоченное множество", которое содержит удвоенные значения первого.</p>
63
<p>Для решения этой задачи можно использовать как стандартный код:</p>
63
<p>Для решения этой задачи можно использовать как стандартный код:</p>
64
<p>Так и с функциями порядка типа "высший", используя метод map:</p>
64
<p>Так и с функциями порядка типа "высший", используя метод map:</p>
65
<p>Последний фрагмент - это укороченная интерпретация. Здесь используется "стрелочный" синтаксис.</p>
65
<p>Последний фрагмент - это укороченная интерпретация. Здесь используется "стрелочный" синтаксис.</p>
66
<h3>Array.prototype.filter</h3>
66
<h3>Array.prototype.filter</h3>
67
<p>Function высшего типа может быть реализована через метод filter. Он будет создавать новый массив из элементов, которые прошли тестирование, предусмотренное callback-функцией. Она будет отправлять методу 3 аргумента: element, index, а также array.</p>
67
<p>Function высшего типа может быть реализована через метод filter. Он будет создавать новый массив из элементов, которые прошли тестирование, предусмотренное callback-функцией. Она будет отправлять методу 3 аргумента: element, index, а также array.</p>
68
<p>В качестве примера подойдет следующий вариант:</p>
68
<p>В качестве примера подойдет следующий вариант:</p>
69
<ol><li>Есть массив, который содержит объекты со свойствами.</li>
69
<ol><li>Есть массив, который содержит объекты со свойствами.</li>
70
<li>В виде параметров используются имена и возраст.</li>
70
<li>В виде параметров используются имена и возраст.</li>
71
<li>Задача - создание массива, который отображает исключительно совершеннолетних.</li>
71
<li>Задача - создание массива, который отображает исключительно совершеннолетних.</li>
72
</ol><p>Здесь тоже на помощь приходят функции, относящиеся к порядку типа "высший". Без них код выглядит так:</p>
72
</ol><p>Здесь тоже на помощь приходят функции, относящиеся к порядку типа "высший". Без них код выглядит так:</p>
73
<p>Если использовать функции порядка типа "высший" в виде filter, можно написать такой программный код:</p>
73
<p>Если использовать функции порядка типа "высший" в виде filter, можно написать такой программный код:</p>
74
<p>Это - наглядный пример того, как можно упростить процесс создания программного кода.</p>
74
<p>Это - наглядный пример того, как можно упростить процесс создания программного кода.</p>
75
<h3>Array.prototype.ruduce</h3>
75
<h3>Array.prototype.ruduce</h3>
76
<p>Функции высшего порядка могут быть реализованы через reduce. Это - еще один встроенный в JS метод. Он выполняет callback-функцию для каждого элемента вызываемого массива. Это приводит к тому, что вследствие вычислений образовывается одно выходное значение.</p>
76
<p>Функции высшего порядка могут быть реализованы через reduce. Это - еще один встроенный в JS метод. Он выполняет callback-функцию для каждого элемента вызываемого массива. Это приводит к тому, что вследствие вычислений образовывается одно выходное значение.</p>
77
<p>Функции высшего порядка, использующие reduce, принимают два параметра:</p>
77
<p>Функции высшего порядка, использующие reduce, принимают два параметра:</p>
78
<ul><li>callback (reduce-функции);</li>
78
<ul><li>callback (reduce-функции);</li>
79
<li>опционально initialValue.</li>
79
<li>опционально initialValue.</li>
80
</ul><p>Callback принимает 4 параметра: accumulator, currentIndex, sourceArray, currentValue. Если в функции высшего порядка параметр initialValue предусматривается, тогда accumulator = initialValue. CurrentValue будет равен первому элементу в массиве.</p>
80
</ul><p>Callback принимает 4 параметра: accumulator, currentIndex, sourceArray, currentValue. Если в функции высшего порядка параметр initialValue предусматривается, тогда accumulator = initialValue. CurrentValue будет равен первому элементу в массиве.</p>
81
<p>В противном случае accumulator = первый элемент в "упорядоченном множестве", а currentValue - второму.</p>
81
<p>В противном случае accumulator = первый элемент в "упорядоченном множестве", а currentValue - второму.</p>
82
<p>А вот - пример, который поможет лучше изучить функции высшего порядка, реализованные через reduce. Пусть нужно просуммировать числовой массив:</p>
82
<p>А вот - пример, который поможет лучше изучить функции высшего порядка, реализованные через reduce. Пусть нужно просуммировать числовой массив:</p>
83
<p>Это - вариант без рассматриваемого компонента. Текущий код можно изменить, внедрив туда reduce:</p>
83
<p>Это - вариант без рассматриваемого компонента. Текущий код можно изменить, внедрив туда reduce:</p>
84
<p>Здесь Reduce-функция будет вызываться для каждого элемента массива. Результат, возвращаемый reducer, хранится в accumulator. CurrentValue включает в себя текущее значение массива. Итог вычислений - это переменная sum.</p>
84
<p>Здесь Reduce-функция будет вызываться для каждого элемента массива. Результат, возвращаемый reducer, хранится в accumulator. CurrentValue включает в себя текущее значение массива. Итог вычислений - это переменная sum.</p>
85
<p>Выше - пример того, как задать начальное значение этой функции высшего порядка. Соответствующие приемы делают программные коды более читаемыми, понятными, чистыми и лаконичными.</p>
85
<p>Выше - пример того, как задать начальное значение этой функции высшего порядка. Соответствующие приемы делают программные коды более читаемыми, понятными, чистыми и лаконичными.</p>
86
<h2>Задание собственной "операции"</h2>
86
<h2>Задание собственной "операции"</h2>
87
<p>Основы затронутой темы изучены. Это - встроенные возможности языка программирования JavaScript. Но есть еще одна важная операция, которая может пригодиться разработку. Речь идет о самостоятельном создании функций порядка типа "высший".</p>
87
<p>Основы затронутой темы изучены. Это - встроенные возможности языка программирования JavaScript. Но есть еще одна важная операция, которая может пригодиться разработку. Речь идет о самостоятельном создании функций порядка типа "высший".</p>
88
<p>Чтобы лучше разобраться в этой операции, представьте, что в JS отсутствует встроенный метод map. Его можно реализовать через изучаемые "подпрограммы".</p>
88
<p>Чтобы лучше разобраться в этой операции, представьте, что в JS отсутствует встроенный метод map. Его можно реализовать через изучаемые "подпрограммы".</p>
89
<p>Предположим, что задан строчный массив. Его нужно конвертировать в integer, где каждый элемент - это длина строчки из оригинального массива. Делается это при помощи следующего программного кода:</p>
89
<p>Предположим, что задан строчный массив. Его нужно конвертировать в integer, где каждый элемент - это длина строчки из оригинального массива. Делается это при помощи следующего программного кода:</p>
90
<p>Здесь:</p>
90
<p>Здесь:</p>
91
<ol><li>Произошло создание функции порядка вида "высшая". Она называется mapForEach.</li>
91
<ol><li>Произошло создание функции порядка вида "высшая". Она называется mapForEach.</li>
92
<li>Соответствующая "операция" будет принимать массив и callback-функцию в fn.</li>
92
<li>Соответствующая "операция" будет принимать массив и callback-функцию в fn.</li>
93
<li>Подобный элемент будет циклично (через for) перебирать массив. Далее - вызывает callback-функцию fn внутри newArray.push. Происходит это для каждой итерации.</li>
93
<li>Подобный элемент будет циклично (через for) перебирать массив. Далее - вызывает callback-функцию fn внутри newArray.push. Происходит это для каждой итерации.</li>
94
</ol><p>Callback fn принимает текущий компонент массива, после чего возвращает длину каждого элемента. Последние будут храниться в newArray. После завершения цикла, newArray будет возвращать параметр в lenArray.</p>
94
</ol><p>Callback fn принимает текущий компонент массива, после чего возвращает длину каждого элемента. Последние будут храниться в newArray. После завершения цикла, newArray будет возвращать параметр в lenArray.</p>
95
<h2>Быстрое изучение темы</h2>
95
<h2>Быстрое изучение темы</h2>
96
<p>Дистанционные онлайн-курсы помогут лучше и быстрее разобраться в return, for и иных фрагментах программных кодов. Там научат писать не только изученные<a>функции</a>, но и другие элементы приложений.</p>
96
<p>Дистанционные онлайн-курсы помогут лучше и быстрее разобраться в return, for и иных фрагментах программных кодов. Там научат писать не только изученные<a>функции</a>, но и другие элементы приложений.</p>
97
<p>Специализированные компьютерные курсы предлагают:</p>
97
<p>Специализированные компьютерные курсы предлагают:</p>
98
<ol><li>Сжатые сроки обучения. Программы рассчитаны в срок до года.</li>
98
<ol><li>Сжатые сроки обучения. Программы рассчитаны в срок до года.</li>
99
<li>Подачу материала понятным и простым языком. Поймет даже тот, кто далек от IT-сферы.</li>
99
<li>Подачу материала понятным и простым языком. Поймет даже тот, кто далек от IT-сферы.</li>
100
<li>Освоить инновационные профессии в кратчайшие сроки. Можно выбрать одно или сразу несколько направлений с учетом имеющихся начальных знаний.</li>
100
<li>Освоить инновационные профессии в кратчайшие сроки. Можно выбрать одно или сразу несколько направлений с учетом имеющихся начальных знаний.</li>
101
<li>Кураторство и интересные домашние задания.</li>
101
<li>Кураторство и интересные домашние задания.</li>
102
<li>Практику с формированием портфолио.</li>
102
<li>Практику с формированием портфолио.</li>
103
</ol><p>В конце курса выдается официальный электронный сертификат. Он поможет подтвердить документально полученные знания, умения, навыки.</p>
103
</ol><p>В конце курса выдается официальный электронный сертификат. Он поможет подтвердить документально полученные знания, умения, навыки.</p>
104
<a></a>
104
<a></a>