Является ли Javascript функциональным языком? Я знаю, что у него есть объекты, и вы также можете делать с ним ООП, но это также функциональный язык, можно ли его использовать таким образом?
Иногда люди говорят функциональное программирование, когда они имеют в виду императивное программирование или процедурное программирование . Строго говоря, функциональное программирование - это:
В информатике функциональное программирование - это парадигма программирования, которая рассматривает вычисления как оценку математических функций и избегает состояния и изменчивых данных . Он подчеркивает применение функций, в отличие от императивного стиля программирования, который подчеркивает изменения в состоянии. Функциональное программирование имеет корни в лямбда-исчислении, формальной системе, разработанной в 1930-х годах для изучения определения функций, их применения и рекурсии. Многие функциональные языки программирования можно рассматривать как разработки лямбда-исчисления.
Хотя Javascript не широко известен и не используется в качестве функционального языка, он имеет некоторые функциональные элементы :
JavaScript имеет много общего с Scheme. Это динамический язык. Он имеет гибкий тип данных (массивы), который может легко имитировать s-выражения. И самое главное, функции - это лямбды.
Scheme - это диалект Lisp и, вероятно, один из языков, о которых думают большинство программистов, когда обсуждают функциональное программирование. Когда дело доходит до объектной ориентации , Javascript - это объектно-ориентированный язык. Но его объектная ориентация основана на прототипе :
Программирование на основе прототипов - это стиль объектно-ориентированного программирования, в котором отсутствуют классы, а повторное использование поведения (известное как наследование в языках на основе классов) выполняется посредством процесса клонирования существующих объектов, которые служат прототипами. Эту модель также можно назвать бесклассовым, ориентированным на прототип или программированием на основе экземпляров. Делегирование - это языковая функция, которая поддерживает программирование на основе прототипов.
Поэтому, хотя Javascript является объектно-ориентированным, он не следует более распространенной модели , основанной на классах , как это делают языки, такие как C ++, C #, Java и PHP (и многие другие). И, конечно, это также императивный язык, который приводит к путанице с функциональным программированием, которое я описал выше.
Вы знаете, как ООП стал / кажется следующей эволюцией в программировании, означает ли это, что «Функциональное программирование» - это следующая эволюция
Ориентация на объект и функциональное программирование - это только два из множества различных парадигм программирования , это разные стили программирования с разными концепциями и абстракциями. Ключевое слово «другое». Нет единой парадигмы, которая лучше других или более развита, чем другие, каждый из которых подходит к одному сценарию лучше, чем другие. Некоторые могут быть намного старше по происхождению, чем другие, но в эволюционном плане это делает их лучше, поскольку они выжили дольше. Но это не очень умный взгляд на это.
Javascript, как я описал выше и, как и многие другие языки, является мультипарадигмой. Это позволяет вам писать код в императивном, основанном на прототипах объектно-ориентированном и функциональном стиле. Вам решать, какой из них лучше всего подходит для всего, что вы строите. Существует также несколько отдельных языков парадигмы, каноническим примером является Java, который допускает только объектно-ориентированное программирование на основе классов. 1 .
Вы должны действительно противостоять любому желанию относиться к языкам и парадигмам как к модным заявлениям. Существует множество дерьма, написанного в основном фанатами / фанатками или специалистами по маркетингу, с небольшим (если вообще) знанием и пониманием программирования. Такие термины, как «лучше», «более развитый» и т. Д., Просто не применяются.
Я лучше всего учусь на примерах, может быть, кто-то может показать выполнение той же задачи способом ООП, а затем способом функционального программирования, чтобы я мог понять и сравнить, что функциональное программирование делает / является.
Это был бы ужасный способ учиться. Функциональная и объектная ориентация - это совершенно разные стили, и любой пример, кроме ужасно простых, не подходит ни к одному, ни к другому стилю.
1 Но в последнее время мы пытаемся расширить область его применения на общее программирование, давайте посмотрим, как это происходит.
В заключение:
- Сконцентрируйтесь на изучении Javascript, это красивый и чрезвычайно полезный язык. Учи язык, а не ажиотаж.
- Несколько разных парадигм, все одинаково полезны. Вам решать, какой из них вы предпочитаете, а какой подходит лучше всего, что вы строите.
- Если вы хотите изучать функциональное программирование, выберите более подходящий язык, например Scheme или Clojure . Но сначала вам нужно понять математические концепции.
- Сделайте некоторое исследование, прежде чем спросить. На большинство ваших вопросов отвечают соответствующие статьи Википедии. Умение исследовать и спрашивать - чрезвычайно важный навык для любого программиста.