2009-11-11 3 views
4

Je vois que les expressions lambda sont devenues un outil très utile à certains moments du langage. Je les ai beaucoup utilisés et la plupart du temps ils sont très bien et rendent le code plus court et peut-être plus clair.quand utiliser ou non Lambda Expressions

Maintenant .. J'en ai vu, je dirais l'usage excessif d'entre eux. Certaines personnes les aiment tellement qu'ils essaient de les utiliser partout où ils peuvent. Parfois, le code C# ressemble à un langage fonctionnel.

D'autres facteurs contre sont le coût en utilisant la réflexion par lambda et qui ne sont pas favorables au débogage. Je voudrais entendre des opinions sur comment bien et comment le code clair est d'utiliser plus ou moins les expressions lambda.

(ce n'est pas le meilleur exemple, mais disons que ce fut le déclencheur)

je rédigeais le code suivant. L'utilisation du delegate { return null; } m'aide à éviter de devoir demander si l'événement est nul ou pas à chaque fois que je dois l'utiliser.

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

Im en utilisant ReSharper et le ReSharper sage (même quelques fois il mange la mémoire literaly) m'a fait la suggestion suivante

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

À mon point de vue, le code à l'aide du délégué semble plus claire. Je ne suis pas contre l'expression de Lamdba j'aimerais juste entendre quelques conseils sur comment et quand les utiliser.

+1

Juste un conseil: Vous n'avez pas besoin de retourner la valeur null de votre délégué. Un délégué vide fonctionnera très bien. –

+0

"le coût en utilisant la réflexion par lambda": il n'y a pas de coût. Le lambda dans votre code est * exactement * équivalent à la méthode anonyme. (Lambdas peut aussi être utilisé comme expression au sens de LINQ, mais il n'y a pas de point de comparaison dans ce cas car les méthodes anonymes ne peuvent pas être utilisées comme expressions.) – itowlson

+0

J'utilise le délégué vide, mais dans ce cas il donne une erreur " Tous les chemins de code ne renvoient pas une valeur dans la méthode anonyme ... " – jmayor

Répondre

7

Voici quelques questions. Tout d'abord, comme pour votre exemple, en utilisant un lambda vs en utilisant la syntaxe de délégué anonyme. Le code généré par le compilateur sera identique, donc il ne s'agit pas d'une différence de performance, mais plutôt d'une différence de lisibilité.

Personnellement, je trouve la syntaxe lambda facile à suivre. Je trouve que la syntaxe lambda est presque toujours plus propre, plus concise et plus compréhensible que la syntaxe des délégués anonymes, donc je la préfère presque toujours.

En ce qui concerne l'utilisation des expressions lambda dans tout le code - Personnellement, je suis un utilisateur assez lourd d'entre eux. Je trouve qu'ils rendent souvent la vie beaucoup plus facile que d'avoir beaucoup de méthodes définies. Si un morceau de code ne va pas être réutilisé par d'autres méthodes (il ne sera appelé et n'existe qu'au même endroit), j'utiliserai un lambda pour l'exprimer.

Si un code doit être utilisé plus d'une fois, il doit être extrait dans une méthode (non anonyme). Aussi, si un morceau de code est quelque chose qui pourrait et devrait être testé, j'ai tendance à faire une méthode pour cela, car cela facilite la testabilité.

+0

C'était une bonne réponse. En tant que développeur junior, il m'a éclairé sur le moment le plus approprié pour utiliser un Lambda. –

+0

J'essaie de penser à un moment où lambdas serait approprié à utiliser. Par exemple, hier, j'ai ajouté une fonction A qui, je le sais, ne sera utilisée que dans un cas (appelé à partir de la fonction B). Si j'avais utilisé une fonction lambda au lieu de définir la fonction A, j'ai l'impression que la fonction B aurait été trop longue, et j'aurais imbriqué la fonction lambda après un autre appel de fonction (-> lambda). Tous les exemples que j'ai regardés en ligne sont triviaux et semblent mieux définis par une fonction. Est-ce que quelqu'un a un exemple quand il croit vraiment qu'un lambda est meilleur? – CPlayer

Questions connexes