2009-11-11 2 views
4

Я вижу, что лямбда-выражения стали очень полезным инструментом в некоторых точках языка. Я использую их много, и большую часть времени они подходят очень красиво и делают код короче и, возможно, более ясным.Когда использовать или нет Лямбда-выражения

Теперь .. Я видел некоторых, я бы сказал, чрезмерное использование их. Некоторым людям нравится их так много, что пытаются использовать их везде, где они могут. Иногда код C# выглядит как функциональный язык.

Другие факторы, влияющие на стоимость, отражают энергию лямбда и не относятся к отладке.

Хотелось бы услышать мнение о том, насколько хорошо и как ясно код, чтобы использовать более или менее выражения лямбда.

(это не лучший пример, но допустим, что это триггер)

Я пишу следующий код. Использование delegate { return null; } помогает мне избежать необходимости спрашивать, является ли событие нулевым или не каждый раз, когда я должен его использовать.

public delegate ContactCellInfo.Guest AddGuest(); 
public event AddGuest GuestRequest = delegate { return null;} 

Im помощью ReSharper и мудрого ReSharper (даже несколько раз literaly ест память) сделал мне следующее предложение

public delegate ContactCellInfo.Guest AddGuest(); 
public event AddGuest GuestRequest =() => null; 

В моей точки зрения кода с помощью делегата выглядит более четким. Я не против выражения Lamdba, просто хотел бы услышать некоторые советы о том, как и когда их использовать.

+1

Только совет: вам не нужно возвращать null от вашего делегата. Пустой делегат будет работать отлично. –

+0

«стоимость используя отражение лямбда»: бесплатно. Лямбда в вашем коде * точно * эквивалентна анонимному методу. (Lambdas также может использоваться как выражение в смысле LINQ, но в этом случае нет смысла сравнивать, потому что анонимные методы не могут использоваться в качестве выражений.) – itowlson

+0

Я использую пустой делегат, но в этом случае он дает ошибку " Не все пути кода возвращают значение в анонимном методе ... » – jmayor

ответ

7

Здесь несколько вопросов.

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

Лично я считаю, что синтаксис лямбда легко следовать. Я нахожу, что синтаксис лямбда почти всегда чист, более краток и понятен, чем анонимный синтаксис делегата, поэтому я предпочитаю его почти всегда.

Что касается использования лямбда-выражений во всем коде - Лично я довольно тяжелый пользователь из них. Я считаю, что они часто делают жизнь намного легче, чем определение множества методов. Если часть кода не будет повторно использована никакими другими методами (она будет вызвана и будет существовать только в одном месте), я буду использовать лямбда для ее выражения.

Если кусок кода будет использоваться более одного раза, его следует вытащить в (не анонимный) метод. Кроме того, если часть кода - это то, что можно и нужно тестировать, я стараюсь сделать для нее метод, поскольку это упрощает тестируемость.

+0

Это был отличный ответ. Он прояснил некоторые вещи для меня, как младшего разработчика, о том, когда наиболее целесообразно использовать Лямбду. –

+0

Я пытаюсь думать о времени, которое лямбда было бы целесообразным использовать. Например, вчера я добавил функцию A, которую я знаю, будет использоваться только в 1 экземпляре (вызванном из функции B). Если бы я использовал лямбда-функцию вместо определения функции A, я чувствую, что функция B была бы слишком длинной, и я бы вложил лямбда-функцию после вызова другой функции (-> lambda). Все примеры, которые я просматривал в Интернете, тривиальны и кажутся лучше определенными функцией. Есть ли у кого-нибудь пример, когда они действительно верят, что лямбда лучше? – CPlayer

Смежные вопросы