Как стать автором
Обновить

Лямбды

Время на прочтение2 мин
Количество просмотров3.2K
Всего голосов 21: ↑19 и ↓2+17
Комментарии9

Комментарии 9

Лямбды очень простая вещь, самое сложное в них это замыкания, так как из-за них можно получить ошибки, которые сложно обнаружить.
можно примерчик замыкания? :) не рублю в этом. И хотелось бы узнать, можно как-то это просто объяснить?
Да у вас в коде есть замыкание — вы используете локальную переменную n внутри лямбды. Это и есть пример замыкания, но плохой, так как писать лямбды с побочным действием очень очень очень плохо. Замыкание проще мыслить как вариант каррирования.
ru.wikipedia.org/wiki/Замыкание_(программирование)
Как раз UseLocal вполне себе пример замыкания.

Согласен с предыдущим оратором, что лучше использовать чистые функции. Иначе нужно следить за побочными эффектами. Хотя такоевые, по крайней мере у меня, почти не встречаются. Видимо особых жестокостей не делаю.
Отлично!
Спасибо
Замечательно, только вот странно что можно не понять в лямбдах?

Несколько замечаний.
1) почему в UseLocal() результат функции присваивается n.

Action f = () => { n = 6; }; — вот так можно писать, когда нам не нужно возвращать значения. Это гораздо удобнее.
Другое дело, что компилятор будет ругаться, что значение не присвоено, но для показательности можно инициировать нулём, который будет заменен на 6.

2) зачем усложнять UseLocal добавление static?
1) это лишь пример того, что лямбды имеют доступ клокальным переменным
Но согласитесь, даже то что это пример не повод писать корявый код.
У Вас сходу не понять, где меняется значение n.
В момент выполнения функции или в момент присваивания значения функции. Некузяво однако.
Извините, но эта информация не заслуживает отдельного поста — это самые азы. Гораздо интереснее было бы почитать про expressions trees и то как их динамически строить — очень полезная штука когда нужно избежать излишнего ветвления для LINQ-выражений.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории