J'appuie également l'utilisation de _ => _.method()
pour les lambdas d'appels de méthode à une ligne, car cela réduit le poids cognitif de l'instruction. Surtout lors de l'utilisation de génériques, l'écriture x => x.method()
ajoute simplement cette considération en une fraction de seconde de "Qu'est-ce que c'est 'x'? Est-ce une coordonnée dans l'espace?".
Prenons le cas suivant:
Initialize<Client> ( _=>_.Init() );
Utilisé avec un appel Generics, le trait de soulignement dans ce cas fonctionne comme un "symbole de contournement". Cela évite la redondance, en définissant que le type de l'argument est évident et peut être déduit de l'utilisation - tout comme lorsque vous utilisez «var» pour éviter de répéter une déclaration de type. Ecrire client=>client.Init()
ici ne ferait qu'allonger l'instruction sans lui ajouter de sens.
Évidemment, cela ne s'applique pas aux paramètres à passer à la méthode, qui doivent être nommés de manière descriptive. Par exemple.:Do( id=>Log(id) );
L'utilisation d'un seul paramètre de soulignement pour les appels de méthode est difficilement justifiable lors de l'utilisation d'un bloc de code au lieu d'un one-liner, car l'identificateur lambda est déconnecté de sa définition générique. En général, lorsque le même identifiant doit être réutilisé, donnez-lui un nom descriptif.
L'essentiel est que la verbosité n'est justifiable que pour la désambiguïsation, en particulier pour les lambdas, qui ont été créés pour simplifier la création de délégués anonymes en premier lieu. Dans tous les cas, le bon sens doit être utilisé, en équilibrant la lisibilité et la concision. Si le symbole n'est qu'un "crochet" à la fonctionnalité réelle, les identificateurs à un caractère conviennent parfaitement. C'est le cas des boucles For et des lettres «i» et «j» comme indexeurs.