Пожалуйста, объясните использование _.identity(value)
для underscore.js. Не удалось понять это из документации (http://underscorejs.org/#identity).
Можете ли вы привести пример его использования?
Пожалуйста, объясните использование _.identity(value)
для underscore.js. Не удалось понять это из документации (http://underscorejs.org/#identity).
Можете ли вы привести пример его использования?
Это, по сути, функция отсутствия операции. Он возвращает значение того, что было передано в него.
Часть о том, что он используется как "итератор по умолчанию" в самой библиотеке, означает, что в других функциях, которые могут иметь необязательный параметр "итератор" (который, скорее всего, используется как функция для применения к каждому элементу массива какой-то), если не передан параметр итератора, библиотека будет использовать этот итератор "no-op" вместо этого, и элементы массива останутся неизменными.
Шаблон кода JavaScript, включающий идентификацию, является фильтрацией значений на основе правдоподобия, например.
var a = [null, null, [1,2,3], null, [10, 12], null];
a.filter(_.identity)
дает [Массив [3], Массив [2]].
Использование
_.compact(a)
более четкий, но нельзя использовать lodash или подчеркивание вообще, например.
function identity(x) {
return x;
}
a.filter(identity)
Является ли это хорошим кодом кода сомнительным по нескольким причинам, но он используется в дикой природе.
Это вовсе не NOOP. NOOP является императивной конструкцией, например. а в функциональном программировании он похож на другие функции, так как он возвращает значение. Если личность была NOOP, тогда все чистые функции можно было бы считать noop, и это не было бы разумной вещью.
Конкретный пример:
Underscore.js определяет _.each и как это.
_.each = function(obj, iterator, context) {
...
}
Этот итератор показывает значение el. Возможно, вы использовали эту идиому.
_.each([1, 2, 3], function(el){
console.log(el);
});
Этот итератор возвращает значение el без изменений.
_.each([1, 2, 3], function(el){
return el;
});
Функция, которая возвращает значение без изменений, происходит часто. Поэтому Underscore.js хочет определить функцию. Underscore.js называет функцию _.identity.
_.identity = function(value) {
return value;
};
Если Underscore.js хочет использовать итератор по умолчанию, для всех Underscore.js требуется вызов _.identity.
_.each([1, 2, 3], _.identity);