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

Можете ли вы объяснить лямбда-выражения?

Я действительно не получаю лямбда-выражения. Пока они были со времен ALGOL, я не стал слышать о них до недавнего времени, когда Python и Ruby стали очень популярными. Теперь, когда С# имеет синтаксис =>, люди в моем мире (.NET) все больше говорят о выражениях lamdba.

Я прочитал статью в Википедии об исчислении лямбда, но я на самом деле не математик. Я не понимаю этого с практической точки зрения. Когда я буду использовать лямбда-выражения? Зачем? Как я узнаю, что это то, что я должен делать?

Можете ли вы показать примеры того, как вы решаете проблемы с лямбда-выражениями в формате до и после? Любой императивный язык в порядке, но С# было бы проще всего понять.

4b9b3361

Ответ 1

В основном, что касается С#, лямбда-выражения - это простой способ создать делегат (или дерево выражений, но пока не оставляйте их в стороне).

В С# 1 мы могли создавать экземпляры делегата только из обычных методов. В С# 2 мы получили анонимные методы. В С# 3 мы получили лямбда-выражения, которые похожи на более сжатые анонимные методы.

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

                       // Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18) 
                       // Transform to sequence of names - a projection
                      .Select(person => person.Name);

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

Ответ 3

лямбда-функции - это просто анонимные функции.

Например, в python вы хотите удвоить все элементы в списке. Существует почти три способа сделать это:

Список-выражения:

[2*x for x in list]

Явная функция:

def double(x):
    return 2*x
map(double, list) # iirc

с lambdas:

double = lambda x : 2*x
map(double, list)

Итак, lambda на большинстве языков - это просто способ избежать синтаксических накладных расходов при создании новой функции.

Ответ 5

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

Ответ 7

Лямбда-выражение является функциональным значением (в том же смысле, что "int" и "string" являются значениями). Это означает, что возможно

  • определить переменную, которая содержит лямбда-выражение (это то же самое, что определение функции)
  • возвращает лямбда-выражение из метода или функции
  • отправить lambda выражение в качестве аргумента функции или метода

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