Я хочу разобраться с концепциями функционального программирования.
Я много лет использовал Javascript для написания сценариев на стороне клиента в веб-приложениях, и, помимо использования прототипов, это были простые манипуляции с DOM, проверка ввода и т. д.
В последнее время у меня есть часто читаю, что Javascript - один из языков, поддерживающих функциональное программирование.
С моим знакомством и опытом работы с Javascript я предпочитаю использовать его для изучения функционального программирования. Я ожидаю, что смогу больше сосредоточиться на основных функциональных концепциях и не увязнуть и не отвлекаться на совершенно новый синтаксис.
Итак, в итоге, является ли Javascript хорошим выбором для изучения концепций функционального программирования? Какие возможности Javascript актуальны / поддерживают функциональное программирование?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


JavaScript поддерживает функции первого класса. См. Используйте методы функционального программирования для написания элегантного JavaScript.
Хорошая ссылка, именно то, что я ищу.
Хотя javascript в некоторой степени поддерживает FP, он не поощряет его напрямую. Вот почему существуют такие проекты, как Функционал Оливера Стила, чтобы восполнить пробелы. Поэтому я бы не рекомендовал его для изучения FP. Попробуйте вместо этого F#.
Javascript - это многопарадигмальный язык. Если ваша цель - изучить концепции функционального языка, попробуйте начать с чистого функционального языка, такого как OCaml или Haskell.
Что еще раз означает «O» в «OCaml»?
+1. Objective Caml, так вот, он не чисто функциональный, но и многопарадигмальный, так как добавляет объектно-ориентированный подход.
Я бы сказал, что, хотя вы можете быстро понять некоторые концепции функционального программирования с помощью JavaScript, последовательное использование JavaScript, как языка функционального программирования, не является обычной практикой. По крайней мере, очевидно, не часто. Большинство людей не публикуют учебники, в которых подробно описывается, как выполнять функциональное программирование с помощью JavaScript - один, на который указал Марксидад, на самом деле является довольно приличным примером, но вы не найдете его много. Функциональные аспекты не всегда очевидны, как когда люди используют замыкания в JavaScript, но не подозревают, что они это делают.
Идея о том, что вы передадите две функции в качестве аргументов третьей функции, а затем получите возвращаемое значение, которое будет некоторым выполнением, связанным с первыми двумя функциями, является продвинутой техникой, которая почти всегда появляется только в ядре полноценных библиотек, таких как jQuery. . Самостоятельно выполняющиеся анонимные функции и тому подобное получили широкое распространение, но до сих пор не используются постоянно. Вместо этого в большинстве руководств основное внимание уделяется объектно-ориентированным возможностям JavaScript, таким как создание свойств и методов, область видимости, контроль доступа, а также как использовать свойство прототипа конструкторов. Честно говоря, если вам нужно функциональное программирование, я бы выбрал язык, который известен своими возможностями.
Полезные моменты, спасибо. Более специализированный функциональный язык может быть лучшим выбором. В конце концов, я мог бы взглянуть на F#.
JavaScript высшего порядка - это способ большой познакомиться с функциональными аспектами javascript. Это также относительно короткое чтение, если вы хотите намочить ноги, не погружаясь в большую книгу.
Я бы порекомендовал прочитать Маленький интриган, довольно тонкую книгу о рекурсии и хорошее введение в функциональный стиль. Хотя он ориентирован на Scheme, его можно легко применить к JavaScript, см. http://javascript.crockford.com/little.html. Я нашел это действительно полезным в моей разработке javascript, хотя к концу это становится довольно сложным.
Я не помню, кто это сказал, но javascript был назван «Схема с синтаксисом Algol». Так что для изучения Scheme / Lisp Javascript - неплохое начало. Однако обратите внимание, что функциональные языки, такие как Lisp, сильно отличаются от чисто функциональных языков, таких как Haskell.
Помимо «первоклассных функций» (что означает, что функции - это значения, которые могут быть присвоены переменным), лексическая область видимости также является неотъемлемой частью того, что составляет функциональный язык.
JavaScript высшего порядка и Маленький Javascripter уже упоминались. Это оба отличные тексты. Кроме того, Программирование высшего порядка в Javascript может быть более простым запуском.
Лучший способ пойти - полностью функциональный. Тогда вы поймете плюсы и минусы.