Подтвердить что ты не робот

Есть ли хороший пример использования для angular.identity()?

Согласно документации

A function that returns its first argument. This function is useful when writing code in the functional style.

Мне интересно, где я могу найти хороший пример такого варианта использования - написать код в функциональном стиле в приложении angular. Благодаря

4b9b3361

Ответ 1

Пример из исходного кода AngularJS:

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

Пояснение:

В случае, если transformationFn предоставляется в качестве первого параметра, он будет вызываться с value в качестве собственного параметра. В противном случае функция identity будет вызываться с тем же значением.

Как указывается исходный код ng:

Эта функция полезна при написании кода в функциональном стиле.

Это означает, что в функциональном программировании нет глобалов, поэтому вам всегда нужно передавать/вводить все, что вам нужно.

Ответ 2

Предположим, что у нас есть две следующие функции:

$scope.square = function(n) {
return n * n
};


$scope.multplybyTwo = function(n) {
return n * 2
};

Чтобы назвать это функциональным способом:

$scope.givemeResult = function(fn, val) {
return (fn || angular.identity)(val);
};

Затем вы можете использовать вышеуказанную функцию, как показано ниже:

$scope.initVal = 5;
$scope.squareResult = $scope.givemeResult($scope.square, $scope.initVal);
$scope.intoTwo = $scope.givemeResult($scope.multplybyTwo, $scope.initVal);

Вы можете перейти по следующей ссылке:

http://litutech.blogspot.in/2014/02/angularidentity-example.html

Ответ 3

Исправьте меня, если я ошибаюсь, но я понимаю, что это

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

может быть "не рефакторирован" для этого

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return angular.identity(value);
  }
};

который был бы функционально эквивалентен этой версии identity -less:

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return value;
  }
};

Итак, я предполагаю, что прецедент был бы применен, когда вы хотите применить определенное преобразование к значению, когда вам предоставляется то, что может или не может существовать на самом деле.

Я хотел лучше объяснить функцию identity (как я ее понимаю), хотя, когда я просматриваю свой ответ, я не думаю, что я действительно ответил на ваш вопрос. Оставляя мой ответ здесь, в любом случае, если это будет полезно.

Ответ 4

angular.identity полезен для случаев, когда вы хотите ссылаться на объект, связанный с родителем, передавая его от родителя к его дочерним элементам.

Функция идентичности подобна нулю для функций. Какой-то бесполезный сам по себе, но иногда полезный как часть выражения с использованием функций более высокого порядка, где вы можете взять функцию в качестве параметра или вернуть ее в результате.

Вот пример значений массива:

Например, вы можете привязать двумерный массив к первоначальному выбору, а затем привязать внутренние массивы к каждому подэлементу. Функция значений в этом случае является идентификационной функцией: она вызывается для каждой группы дочерних элементов, передается данные, привязанные к родительскому элементу, и возвращает этот массив данных.

Используйте его, когда необходимо передать фиктивную функцию:

  • обещание ($ q)
  • компилятор ($ compile)
  • a unit test (шпион/макет)

который действует как источник данных или насос для фильтра трубы.

Для сравнения, Angular.noop неправильно обрабатывает разрешение/отклонение promises правильно, потому что он всегда возвращает undefined, тогда как angular.identity правильно обрабатывает разрешение/отклонение promises, потому что он всегда возвращает переданный ему аргумент (f(x) = x).

В терминах конструкторов в Angular он имеет значение как таковое:

JavaScript-движки возвращают только экземпляр конструктора, если конструктор явно не возвращает объект (т.е. значение объекта или функции типа). Следовательно, новая идентичность (значение) всегда является объектом. Таким образом, новое значение identity (value) == возвращает только true, если значение является объектом. Это связано с тем, что операторы равенства в JavaScript всегда проверяют идентификатор, если один из операндов является объектом.

Ссылки