Является ли Javascript функциональным языком программирования? - PullRequest
128 голосов
/ 18 октября 2010

Только потому, что функции являются объектами первого класса, существуют замыкания и функции более высокого порядка, заслуживает ли Javascript называться языком функционального программирования?Я думаю, что главное, чего ему не хватает, - это Pure Functions, и он не «чувствует» себя как другие функциональные языки, такие как lisp (хотя на самом деле это не веская причина, чтобы не быть функциональным языком ...)

Ответы [ 13 ]

0 голосов
/ 19 октября 2010

Что я действительно ненавижу в javascript (если вы пытаетесь рассматривать его как язык FP), так это:

function getTenFunctionsBad() {
  var result = [];
  for (var i = 0; i < 10; ++i) {
    result.push(function () {
      return i;
    });
  }
  return result;
}

function getTenFunctions() {
  var result = [];
  for (var i = 0; i < 10; ++i) {
    result.push((function (i) {
      return function () {
        return i;
      }
    })(i));
  }
  return result;
}

var functionsBad = getTenFunctionsBad();
var functions = getTenFunctions()
for (var i = 0; i < 10; ++i) {
  // using rhino print
  print(functionsBad[i]() + ', ' + functions[i]());
}

// Output:
//   10, 0
//   10, 1
//   10, 2
//   10, 3
//   10, 4
//   10, 5
//   10, 6
//   10, 7
//   10, 8
//   10, 9

Вы должны понимать среду стека JS (я не понимаю, если это правильный термин), чтобы понять такое поведение.

В схеме, например, Вы просто не можете произвести такую ​​вещь (Хорошо, хорошо - с помощью ссылок на базовые языки Вы можете сделать это):

(define (make-ten-functions)
  (define (iter i)
    (cond ((> i 9) '())
          (else (cons (lambda () i) (iter (+ i 1))))))
  (iter 0))

(for-each (lambda (f)
            (display (f))
            (newline)) (make-ten-functions))
0 голосов
/ 18 октября 2010

Javascript в точку. Это действительно зависит от того, как вы будете программировать. Если бы я кодировал OO, не будет ли OO? Так что, если вы просто кодируете вещи «функционально», это будет функционально. Я полагаю, что это мультипарадигмальный язык, поэтому назвать его одной вещью не совсем точно.

0 голосов
/ 18 октября 2010

Ну, я бы не сказал, что это функциональное программирование, но тогда я скажу , что он объектно-ориентированный, и только сегодня один друг сказал, что он тоже не положит его на полку.* Так что, хотя я бы не сказал, что это так, я думаю, есть место для мнений.У него есть классические особенности функционального программирования, у него нет других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...