Есть несколько ситуаций, когда я вижу, что они использовали справедливый бит:
С одной стороны, они отлично подходят для высокоуровневой итерации по коллекциям.Часто нам просто нужно применить какое-то преобразование к списку, дереву или чему-то еще.Использование лямбда-кода делает простой и компактный код для обработки коллекций.Для случайного бесполезного примера (в C # с использованием LINQ):
var list = new List<int>();
//...
list.Where(x => x < 10).Aggregate( (current, total) => total + current * current );
Без лямбда-кодов этот тип был бы ужасно и излишне велик.
Они также удобны при использовании API, которыйвращаются вокруг обратных вызовов, так как во многих случаях нам нужно использовать обратный вызов только один раз.Это отстойно от необходимости писать полные функции, предназначенные для одноразового использования, поскольку это просто дополнительный код, который загромождает пространства имен.
Последний шаблон дизайна приходит к вам из JavaScript.Я не уверен, применимо ли это к лямбдам в целом, так как я не знаю, являются ли замыкания обязательным компонентом лямбд.Но так как многие языки позволяют лямбдам закрывать переменные, я все равно упомяну об этом.
Как вы можете знать или не знать, JavaScript способен к объектно-ориентированному проектированию посредством наследования на основе прототипов.Но один недостаток заключается в том, что он не имеет понятия абстракции данных.Однако недавно было обнаружено, что лямбды могут фактически использоваться для обеспечения абстракции данных.Используя замыкания анонимных функций (которые на самом деле являются лямбдами), мы можем выполнить это:
function Rectangle(width, height) {
this.getWidth = function() { return width; }
this.getHeight = function() { return height; }
}
Поскольку замыкания, определяемые getWidth
и getHeight
, включают параметры width
и height
параметры все еще можно использовать из методов.Но они нигде не поддерживаются, поэтому никакой другой код не имеет к ним доступа после выхода из конструктора Rectangle
.Таким образом, width
и height
теперь являются частными для Rectangle
и доступны только через предоставляемые методы доступа.
Помимо них, я бы сказал, что лямбды имеют приятный теоретический взгляд на них.Поддерживающие их языки чувствуют себя более полными, менее строгими и менее загроможденными.