Priest512
@Priest512
Разработчик .NET, С++

Где, когда и как лучше использовать лямбда-выражения?

Подскажите) Вот читаю Рихтера, поднимаю уровень так сказать. Интересует вопрос, а в каких случаях можно использовать лямбда-выражения, а в каких использовать отдельный метод или делегат? Насколько я понимаю, сложные вычисления или алгоритмы лучше отправлять в метод? Есть конкретные условия по этой части? Или тут исходя из субъективного взгляда программиста. Поделитесь своим опытом)
  • Вопрос задан
  • 3343 просмотра
Пригласить эксперта
Ответы на вопрос 5
@mayorovp
Если кратко - то используйте лямбды до тех пор, пока не запутаетесь в них. Как запутаетесь - так и поймете ответ на свой вопрос.
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Каноническое использование лямбда функций - для захвата переменных в пространстве имен окружающей функции. Почитайте про closure.
Ответ написан
Mrrl
@Mrrl
Заводчик кардиганов
Я использую лямбда-выражения в двух случаях:
- когда это действительно "выражение", т.е. всё вычисление укладывается в одну формулу;
- когда для вычислений нужно использовать значения переменных текущего метода.
При этом я помню, что "под ковром" компилятор создаст для каждого контекста с лямбда-выражением отдельный класс, и захваченные переменные будут полями этого класса (а само лямбда-выражение - его методом). Причём они будут использоваться, как поля, не только для кода, вычисляющего это выражение, но и для всей работы с этими переменными. Так что, если в конкретном месте приходится думать об эффективности, то надо всё взвесить.
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
У вас есть "главная" функция которая делает:

1. Что -то делаю раз
2. Что-то делаю два
3. Что-то делаю три.

"Что-то делаю два" имеет разные варианты реализации, в одном случае вы делаете одно, в другом другое. Вы можете для каждой такой реализации написать несколько вариантов реализации главной функции, и всегда в ней шаги №1 и №3 будут идентичны. Чтобы не повторятся, вы выностие шаг №2 в анонимную функцию, и теперь можете передавать её как параметр главной функции, т.о. вы сделали код более кратким.
Ответ написан
Комментировать
@anweledig
Кодер самоучка.
Например, нужно написать 4 метода которые делают достаточно схожие действия. Пусть это будут арифметические действия с int. Но зачем писать реализацию всех методов, если можно передать лямбдой разные действия всего лишь в один:
class Program
    {
        static void Main ( string [ ] args )
        {
            int i;

            i = SomeAction ( 10 , 20 , ( a , b ) => a + b );
            i = SomeAction ( 10 , 20 , ( a , b ) => a - b );
            i = SomeAction ( 10 , 20 , ( a , b ) => a / b );
            i = SomeAction ( 10 , 20 , ( a , b ) => a * b );
        }

        static int SomeAction( int a1 , int a2 , Func<int,int,int> func )
        {
            return func ( a1 , a2 );
        }
    }


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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы