HTML Diff
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>