Pergunta

Eu tenho esses dois pedaços de código, wich é mais legível?

  1. foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. LINQ

    return risks.Sum(risk => risk.TechnicalPremium);
    
Foi útil?

Solução

Se a equipe que trabalha sobre o código sabe o que a versão Linq faz e sabe o seu funcionamento interno, então é mais legível.

Outras dicas

Use o que você preferir, mas escondê-lo em um método:

return risks.SumTechnicalPremium();

Nem. O primeiro é mais detalhado e susceptível de ser compreendida por todos. A segunda é mais concisa e compreendida por todos, mesmo com um conhecimento de passagem de linq facilmente.

Eu diria que você pode basear sua escolha sobre o ambiente em que está.

Para alguém que pode ler LINQ, o LINQ.

Para alguém que tem que interpretar o código passo a passo (usando intellisense / documentação o mais curto.

Vá com LINQ. Se você acha que precisa de explicação, um comentário de uma linha vai cuidar disso. Como as pessoas ficam mais usado para LINQ, a necessidade de comentários vai embora.

O código LINQ é ao mesmo tempo muito legível e auto-documentar.

A primeira opção é mais legível para uma gama maior de pessoas. A segunda opção tem uma 'barreira de entrada' em que o leitor pode ou conhecer e compreender LINQ. É mais sucinta, e pode ser, portanto, melhor se sua audiência é sobre essa barreira de entrada.

Eu acho que a segunda opção é melhor em que ele deve ser mais eficiente. É, no entanto, menos óbvio o que está acontecendo (pelo menos para mim).

Eu diria que o primeiro desde que eu não sei LINQ. Em risco de mais de documentar eu usaria que um com uma breve descrição do que está acontecendo. Ou apenas dizer que é LINQ para as pessoas que podem não ter idéia.

Se você fornecer um comentário explicando-o de propósito, então eu ir para a opção Linq.

O primeiro se você não tem conhecimento do Linq. desenvolvedor qualquer um pode ler e compreender o primeiro.

Não há nenhum problema legibilidade aqui. Clique em Soma e bateu F1.

Linq para a vitória.

Cada idioma tem convenções para a melhor maneira de código tais coisas, de modo que é mais legível para pessoas que usam regularmente que a linguagem não é universal. Para um Java ou normal programador C #, a primeira opção é mais legível. Para alguém utilizado para LINQ ou programação funcional, o segundo é mais legível.

Eu não sei c #, mas o segundo olhares alternativos muito mais limpo para mim e eu pude entender o que ele faz (ok, com alguns adivinhar e cruzamento de dados com a primeira versão). Probabably por causa de algum fundo funcional. Porém, no primeiro você tem que olhar para technicalPremium em 4 (!) Lugares. A segunda é muito mais curto e mais fácil de entender se você está apenas lendo sobre o código.

ou

decimal technicalPremium = 0;

foreach (risco de Risco em riscos) technicalPremium = technicalPremium + risk.TechnicalPremium;

retorno technicalPremium;

Eu vejo as pessoas dizendo que como o primeiro "se você não sabe o Linq". Sim, e o primeiro é ilegível se você não sabe C #. Esta não é uma questão de "o que é mais legível", mas "que recursos de linguagem que estamos confortáveis ??usando?"

Comece por ter uma conversa com sua equipe sobre as partes da linguagem / framework / conjunto de ferramentas que todo mundo odeia, e declará-los fora dos limites. Tudo o resto é considerado parte do vocabulário padrão, e todos devem ser fluentes. Esta lista deve ir em sua codificação doc padrões, junto à " Nunca fazer tipos de valores mutáveis ??" e " não se incomode com propriedades triviais para os membros não-públicos ".

Enquanto Linq não está na sua lista de "excluir", o segundo exemplo é muito mais legível do que o primeiro. Por quê? Porque ele declara intenção do código, em vez de simplesmente apresentar o mecanismo para o leitor a decifrar.

Se o seu objetivo é torná-lo mais legível para "qualquer um" que pode vir atrás de você, então use o foreach. Eu interpreto "mais legível" a qualquer um médio com experiência nos conceitos básicos da linguagem deve ser capaz de entender. Para alguém familiarizado com o LINQ e ainda usando VS2005 ou mais cedo, a sintaxe LINQ seria confuso.

Eu diria que a primeira parte do código é definitivamente mais legível, e seria ainda mais legível se você renomeou, pelo menos, o risco variável de modo que ele tinha um nome diferente da classe. Seria, provavelmente, também seria melhor se você renomeou os riscos da matriz.

Eu concordo com aqueles que dizem que o segundo será facilmente entendido como Linq torna-se mais amplamente adotado. É certamente mais sucinto.

No entanto, tenho algumas preocupações sobre facilidade de depuração. Parece muito mais fácil passo através do código no foreach, para ver exatamente o que está fazendo em cada passagem.

Eu acho que depende do que você entende por "legível". O primeiro exemplo indica claramente a lógica do programa e deve ser compreensível por qualquer pessoa com um fundo de programação.

Para mim, o segundo exemplo é mais intuitivo com base no contexto (ou seja, você está tomando uma série (ou algum outro tipo de coleção) e executar um método chamado Sum em cada elemento desse array). O único lugar o segundo exemplo pode se tornar menos claro é na própria expressão lambda real especialmente para alguém que não tenha tido experiência com lambdas ou alraedy têm um fundo na programação funcional.

Eu acho que lambdas se tornar mais prevalentes no .NET programar isso vai se tornar um problema menor. Tal como está, eu acho que há uma pequena curva de aprendizagem para compreender as noções básicas de como usar expressões lambda em .NET.

O segundo, definitivamente. Ter um grande bloco de código, para fazer algo tão simples como soma é apenas desnecessário. Eu também não sei o que LINQ é, mas é perfeitamente legível para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top