Полезность анонимной функции
Почему бы не написать содержимое анонимной функции только вместо анонимной функции И содержимого анонимной функции?
7 ответов
Я не знаю, применимо ли это вообще, так как это специфично для Javascript, и я не вижу тега Javascript, но... нередко создавать + вызывать анонимную функцию сразу. Это часто делается ради сохранения глобального масштаба от переменного загрязнения.
var x = 1;
(function(){
var x = 2;
})();
x == 1;
Поскольку вы не пишете анонимную функцию, немедленно вызывайте ее. Обычно он передается какой-то другой функции, которая работает с ней (например, использует анонимную функцию для сопоставления массива с другим массивом).
Они обычно используются для обратных вызовов. Вы не можете просто написать контент, потому что ваш код не выполняет его напрямую.
Вероятно, наибольшее использование для одноразовых функций, которые не будут использоваться где-либо еще или которые должны быть созданы по требованию, динамически. Таким образом, им не нужно "загрязнять" пространство имен.
Например, в Python:
x_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_values = map(lambda x: x**x + 2x + 3, x_values)
Используя лямбду, мне не нужно создавать функцию в пространстве имен модуля только для одного полинома (x^2 + 2x + 3).
Есть много областей, где они могут пригодиться, особенно в функциональном программировании (например, поиск замыканий или каррирование).
Если вы спрашиваете "Зачем использовать лямбда-выражение?", То есть несколько ответов. С одной стороны, лямбда-выражения, будучи сокращёнными, обычно легче читать и понимать, чем гораздо более подробные альтернативы полных анонимных функций (т. Е. С термином делегат ()) или полноценной функцией и делегатом. Лямбда-выражения также идеально подходят для выполнения коротких, простых, "выразительных" вычислений (т. Е. Простой математики на множестве входных данных), что довольно часто встречается в программировании.
Лямбда-выражения - это мощный инструмент, который может помочь улучшить выразительность, простоту и удобочитаемость вашего кода.
Это сделано для того, чтобы вам не нужно было создавать функциональную оболочку, которая по сути бесполезна.
Они существуют, потому что вы часто хотите иметь семантику метода с синтаксисом выражения.
var l = new List<int>() { 1, 2, 3, 4, 5 };
var a = l.Where( i => i > 3 ); // a = 4, 5
Я не хотел писать новый метод-предикат, который проверял, было ли целое число больше трех. Я хочу, чтобы смысл метода, где я могу только выразить. Анонимная функция позволяет мне иметь оба. Woot!:)