JavaScript
Comments 16
+1
Эх, вот кто бы объяснил, зачем вообще придумывать термин «функции высших порядков»? Почему недостаточно просто термина «функция»?
Функция — она и есть функция, что-то на входе, что-то на выходе, в частности может быть и другая функция. Ну и что? Зачем именно их выделять в отдельную категорию? Почему не пишут статей про функции, возвращающие файловые дескрипторы? Или строки? Или объекты? У каждого типа свои особенности, на то деление значений на типы и введено. Но выделяют почему-то именно функции…
+1
А зачем вводить термин «рекурсия»? Просто функция вызывает функцию. Иногда другую, а в этот раз саму себя, ну и что теперь, отдельное название для этого придумывать? =)
Функции высшего порядка имеют свою специфику, как с точки зрения программиста, так и с точки зрения реализации языка. Не во всех языках они вообще возможны, начнём с этого.
0
Логично. Ну так вот про специфику «высших порядков» я и не могу понять.

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

Вообще оба термина из математики. А там во-первых, рекурсия возможна не во всех построениях, и тогда специальный оператор рекурсии вводится. Вот от этого оператора и пошел термин. Во-вторых математиков не пугают никакие термины вроде «высших порядков», они вообще мастаки придумывать термины на каждый чих. Без огорода новых терминов статья за статью не считается. А среди программистов часто встречаю испуганные глаза от таких слов, они их с «высшая математика» ассоциируют. А тут всего-то тип параметров/результата поменялся.

Вот и интересно, почему именно этот математический «терминишко» взял и прижился. В чем существенная специфика «высших порядков»?
0
Про испуганные глаза я совсем не шучу.

Очень уж врезалось мне в память придыхание, с каким на очередном митинге было сказано слово «лямбды» одним весьма талантливым программистом-нематематиком. А пока была «короткая запись» функций — всё было ок. Так и не прошел мой PR тогда, пришлось кучу лапши из `.bind` добавлять. Потом-то и он привык к термину, но осадок остался))
0
Потому что есть разделение на «данные» и «действие (алгоритм)». Ведь функция — это некое действие, производимое над данными. И не важно что это — строки, числа или файловые дескрипторы. А вот воспринимать функции как данные (а это и есть основа функционального программирования — отсутсвие такого чёткого разделения) — это уже совсем новое мышление. И тут гораздо больше специфики, чем в различии между строками и числами.
+1
Одной из особенностей, отличающих JS от многих других языков программирования, является то, что в этом языке функция — «объект первого класса».


Ну, строго говоря, не таких уж и многих — ФП-парадигма сейчас очень много в какие языки проросла. Разумеется, я говорю о мейнстримных языках, а не о Brainfuck.

Или, говоря по-русски, функция — это значение.


Я склонен не согласиться с этим утверждением.
+1
Аргументируйте свою склонность, не стоит себя сдерживать.
+1
Спасибо. Вспомнила некоторые забытые особенности функций в JS.

P.S. В последнем примере кода опечатка: в переменную
lastTimeout
ничего не присваивается.
0
Могу и ошибиться, но наконец-то я кажется понял как работают нативные генераторы в es6 с next().
Only logged in users are able to leave comments. , please.