Можете ли вы объяснить лямбда-выражения?
Я действительно не получаю лямбда-выражения. Пока они были со времен ALGOL, я не стал слышать о них до недавнего времени, когда Python и Ruby стали очень популярными. Теперь, когда С# имеет синтаксис =>
, люди в моем мире (.NET) все больше говорят о выражениях lamdba.
Я прочитал статью в Википедии об исчислении лямбда, но я на самом деле не математик. Я не понимаю этого с практической точки зрения. Когда я буду использовать лямбда-выражения? Зачем? Как я узнаю, что это то, что я должен делать?
Можете ли вы показать примеры того, как вы решаете проблемы с лямбда-выражениями в формате до и после? Любой императивный язык в порядке, но С# было бы проще всего понять.
Ответы
Ответ 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);
Там более полное обсуждение этого - наряду с другими аспектами - в моей статье о закрытии.
Ответ 2
Ответы на этот вопрос могут быть вам полезны.
Ответ 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 на большинстве языков - это просто способ избежать синтаксических накладных расходов при создании новой функции.
Ответ 4
Это одно из лучших объяснений, которые я видел, как понять большие идеи в использовании лямбда-выражений в С#:
http://www.developingfor.net/c-30/upgrade-your-c-skills-part-3-lambda-expressions.html
Ответ 5
Мое основное использование лямбда-выражений в .NET было при работе со списками. Используя выражение лямбда, вы можете создать запрос в списке аналогично тому, как вы строили бы инструкцию SQL для поиска в таблице базы данных.
Ответ 6
Эта статья должна иметь отношение к вашим интересам. Основные инстинкты: выражения лямбда
Ответ 7
Лямбда-выражение является функциональным значением (в том же смысле, что "int" и "string" являются значениями). Это означает, что возможно
- определить переменную, которая содержит лямбда-выражение (это то же самое, что определение функции)
- возвращает лямбда-выражение из метода или функции
- отправить lambda выражение в качестве аргумента функции или метода
Посмотрите на функции, такие как map, filter или fold (на любом функциональном языке), чтобы увидеть, как лямбда-выражения используются в качестве аргументов для других функций.