Para responder à sua pergunta sobre a pesquisa existente
But has anything been written or researched on recognizing the point where striving for code brevity stops being useful and becomes a barrier to comprehension?
Sim, tem havido trabalho nesta área.
Para entender essas coisas, você precisa encontrar uma maneira de calcular uma métrica para que as comparações possam ser feitas em uma base quantitativa (em vez de apenas realizar a comparação baseada em sagacidade e intuição , como as outras respostas fazem). Uma métrica potencial que foi analisada é
Complexidade Ciclomática ÷ Linhas de Código de Origem ( SLOC )
No seu exemplo de código, essa proporção é muito alta, porque tudo foi compactado em uma linha.
The SATC has found the most effective evaluation is a combination of size and [Cyclomatic] complexity. The modules with both a high complexity and a large size tend to have the lowest reliability. Modules with low size and high complexity are also a reliability risk because they tend to be very terse code, which is difficult to change or modify.
Aqui estão algumas referências se você estiver interessado:
McCabe, T. e A. Watson (1994), Complexidade de Software (CrossTalk: Jornal de Engenharia de Software de Defesa).
Watson, A. H., & McCabe, T. J. (1996). Teste Estruturado: Uma Metodologia de Teste Usando a Métrica de Complexidade Cyclomática (Publicação Especial NIST 500-235). Retirado 14 de maio de 2011, do site da McCabe Software: link
Rosenberg, L., Hammer, T., Shaw, J. (1998). Métricas de Software e Confiabilidade (Anais do Simpósio Internacional IEEE em Engenharia de Confiabilidade de Software). Obtido em 14 de maio de 2011, no site da Penn State University: link
Minha opinião e solução
Pessoalmente, eu tenho nunca valor de brevidade, apenas legibilidade. Às vezes, a brevidade ajuda a legibilidade, outras vezes não. O que é mais importante é que você está escrevendo Código realmente óbvio (ROC) em vez do código somente de escrita (WOC).
Apenas por diversão, aqui está como eu escreveria, e peça aos membros da minha equipe para escreverem:
if ((costIn <= 0) || (costOut <= 0)) return 0;
decimal changeAmount = costOut - costIn;
decimal changePercent = changeAmount / costOut * 100;
return changePercent;
Note também que a introdução das variáveis de trabalho tem o efeito colateral de ativar a aritmética de ponto fixo ao invés da aritmética inteira, então a necessidade de todos os lançamentos para decimal
é eliminada.