Também apoio o uso de _ => _.method()
para lambdas de chamada de método de uma linha, uma vez que reduz o peso cognitivo da instrução. Especialmente ao usar genéricos, escrevendox => x.method()
apenas adiciona aquela consideração de fração de segundo de "O que é este 'x'? É uma coordenada no espaço?".
Considere o seguinte caso:
Initialize<Client> ( _=>_.Init() );
Usado com uma chamada Genérica, o sublinhado neste caso funciona como um "símbolo de desvio". Isso evita redundância, definindo que o tipo do argumento é óbvio e pode ser inferido pelo uso - assim como quando você usa 'var' para evitar a repetição de uma declaração de tipo. Escrevendoclient=>client.Init()
aqui apenas tornaria a instrução mais longa, sem adicionar nenhum significado a ela.
Obviamente, isso não se aplica aos parâmetros a serem passados ao método, que devem ser nomeados de forma descritiva. Por exemplo.:Do( id=>Log(id) );
O uso do parâmetro de sublinhado único para chamadas de método dificilmente se justifica ao usar um bloco de código em vez de uma linha, uma vez que o identificador lambda é desconectado de sua definição genérica. Em geral, quando o mesmo identificador deve ser reutilizado, dê a ele um nome descritivo.
O resultado final é que a verbosidade só é justificável para desambiguação, especialmente para lambdas, que foram criados para simplificar a criação de delegados anônimos em primeiro lugar. Em qualquer caso, o bom senso deve ser usado, equilibrando legibilidade e concisão. Se o símbolo for apenas um "gancho" para a funcionalidade real, os identificadores de um caractere são perfeitamente adequados. Esse é o caso com loops For e as letras "i" e "j" como indexadores.