полезность анонимной функции - PullRequest
1 голос
/ 11 июля 2009

Почему бы не написать содержимое анонимной функции только вместо анонимной функции И содержимого анонимной функции?

Ответы [ 7 ]

7 голосов
/ 11 июля 2009

Поскольку вы не пишете анонимную функцию, немедленно вызывайте ее. Обычно он передается какой-то другой функции, которая работает с ней (например, использует анонимную функцию для сопоставления массива с другим массивом).

2 голосов
/ 11 июля 2009

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

1 голос
/ 11 июля 2009

Вероятно, наибольшее использование для одноразовых функций, которые не будут использоваться где-либо еще или которые должны быть созданы по требованию, динамически. Таким образом, им не нужно «загрязнять» пространство имен.

Например, в 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).

Есть много областей, где они пригодятся, особенно в функциональном программировании (например, поиск замыканий или каррирование).

0 голосов
/ 11 июля 2009

Я не знаю, применимо ли это вообще, поскольку оно относится к Javascript, и я не вижу тега Javascript, но .... нередко создается + вызывается анонимная функция сразу. Это часто делается ради сохранения глобального масштаба от переменного загрязнения.

var x = 1;
(function(){        
    var x = 2;
})();
x == 1;
0 голосов
/ 11 июля 2009

Если вы спрашиваете «зачем использовать лямбда-выражение?», Тогда есть несколько ответов. С одной стороны, лямбда-выражения, будучи сокращёнными, обычно легче читать и понимать, чем гораздо более подробные альтернативы полных анонимных функций (т. Е. С термином делегат ()) или полноценной функцией и делегатом. Лямбда-выражения также идеально подходят для выполнения коротких, простых, «выразительных» вычислений (то есть простой математики на множестве входных данных), что довольно часто встречается в программировании.

Лямбда-выражения - это мощный инструмент, который может помочь улучшить выразительность, простоту и удобочитаемость вашего кода.

0 голосов
/ 11 июля 2009

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

var l = new List<int>() { 1, 2, 3, 4, 5 };
var a = l.Where( i => i > 3 );  // a = 4, 5

Я не хотел писать новый метод-предикат, который проверял, было ли целое число больше трех. Я хочу, чтобы смысл метода, где я могу только выразить. Анонимная функция позволяет мне иметь оба. Woot! :)

0 голосов
/ 11 июля 2009

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

...