Bad Code Academy: novas linhas, espaços e recuo

Olá, Habr! Apresento a sua atenção a tradução do artigo "Dark code-style academy: line quebras, espaçamento e recuo" do autorzhikin2207



imagem



Oi, gente! Deixe-me continuar com nossa academia de código ruim. Nesta postagem, revelaremos outra maneira de desacelerar sua leitura de código. Os truques a seguir podem ajudá-lo a reduzir sua compreensão do código e aumentar as chances de bugs nele. Pronto? Vamos começar.



Quebras de linha, espaços e recuos podem matar.



Como as pessoas leem livros? De cima para baixo, da esquerda para a direita (pelo menos a maioria). O mesmo acontece quando os desenvolvedores leem o código. Uma linha de código deve conter um pensamento, portanto, cada linha deve conter apenas um comando. Se você quiser envergonhar outros desenvolvedores, é melhor violar essas diretrizes. E deixe-me mostrar como fazer.



Exemplo # 1



Veja este pedaço de código. Uma ideia em uma linha. O código é tão limpo que me deixa doente.



return elements
    .Where(element => !element.Disabled)
    .OrderBy(element => element.UpdatedAt)
    .GroupBy(element => element.Type)
    .Select(@group => @group.First());


Podemos combinar todas as instruções em uma linha, mas isso seria muito fácil. Nesse caso, o cérebro do desenvolvedor entenderá que algo está errado aqui e dividirá os operadores da esquerda para a direita. Mole-mole!



É melhor manter algumas declarações na mesma linha e outras dividir. A melhor opção é quando o desenvolvedor pode nem perceber alguns dos operadores, o que levará a mal-entendidos e, em última instância, a um erro. Outra opção é apenas reduzir lentamente sua compreensão desse código até que ele grite: "Que diabos é isso!?"



return elements.Where(e => !e.Disabled)
    .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
    .Select(g => g.First());


Como você gosta disso? Você pode adicionar algum recuo para que outros desenvolvedores formate seu código por décadas se precisarem renomear a variável de elementos.



return elements.Where(e => !e.Disabled)
               .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
               .Select(g => g.First());


Envie-me um cartão postal se essa abordagem for revisada por sua equipe.



Dica : deixe algumas declarações em uma linha e algumas em linhas separadas.



Exemplo # 2



Absolutamente a mesma ideia aqui. Este é o único código que você vê com mais frequência.



var result = 
    (condition1 && condition2) || 
    condition3 || 
    (condition4 && condition5);


O procedimento é o mesmo. Separe as linhas para confundir o leitor o máximo possível. Jogue um pouco com as novas linhas para obter o melhor resultado.



var result = (condition1 && condition2) || condition3 || 
    (condition4 && condition5);


E adicione algum recuo para fazer o código parecer normal.



var result = (condition1 && condition2) || condition3 || 
             (condition4 && condition5);


Lembre-se de que você deve encontrar um equilíbrio entre a ilegibilidade do seu código e a credibilidade do seu estilo.



Dica : jogue com novas linhas para obter melhores resultados.



Exemplo # 3



E quanto a isso?



if (isValid) 
{ 
    _unitOfWork.Save();
    return true; 
} 
else 
{ 
    return false; 
} 


O mesmo problema, mas por outro lado. Aqui, a melhor opção seria combinar os operadores em uma linha, é claro, colocando chaves.



if (isValid) { _unitOfWork.Save(); return true; } else { return false; } 


Essa abordagem só funcionará se você tiver poucas instruções nos blocos then e else. Caso contrário, seu código pode ser rejeitado na fase de revisão do código.



Dica : Combine pequenas instruções if / for / foreach em uma linha.



Exemplo # 4



80 caracteres por linha é o padrão recomendado atual. Isso permite que você mantenha a concentração do desenvolvedor enquanto ele lê seu código. Além do mais, você pode abrir dois documentos ao mesmo tempo na mesma tela quando necessário, deixando espaço para o Solution Explorer.



bool IsProductValid(
    ComplexProduct complexProduct, 
    bool hasAllRequiredElements, 
    ValidationSettings validationSettings)
{
    // code
}


A maneira mais fácil de desacelerar a leitura de seu código é fazer outros desenvolvedores rolarem seu código horizontalmente. Apenas ignore a regra dos 80 caracteres.



bool IsProductValid(ComplexProduct complexProduct, bool hasAllRequiredElements, ValidationSettings validationSettings)
{
    // code
}


É super fácil: esqueça o que aconteceu antes de começar a rolar a tela ou pule a linha na qual começou. Ótimo truque.



Dica : de propósito, ignore a regra dos 80 caracteres.



Exemplo # 5 Uma



linha em branco no lugar certo é uma ferramenta poderosa para agrupar seu código e torná-lo lido mais rápido.



ValidateAndThrow(product);

product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;
product.DisplayStatus = DisplayStatus.New;

_unitOfWork.Products.Add(product);
_unitOfWork.Save();

return product.Key;


Uma linha em branco no lugar errado, combinada com as outras dicas deste artigo, pode ajudá-lo a salvar seu trabalho. Qual linha em branco você prefere?



ValidateAndThrow(product);
product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;

product.DisplayStatus = DisplayStatus.New;
_unitOfWork.Products.Add(product);

_unitOfWork.Save();
return product.Key;


Dica : insira linhas em branco aleatoriamente.



Exemplo # 6



Quando você efetua um commit em um repositório, você tem uma pequena oportunidade de ver o que exatamente você irá enviar. NÃO FAÇA ISSO! Tudo bem se você adicionar uma linha em branco extra como aqui.



private Product Get(string key) 
{
    // code
}

private void Save(Product product) 
{
    // code
}


Ou, melhor ainda, acrescentou alguns espaços em uma linha em branco (para entender a diferença, destaque a 5ª linha).



private Product Get(string key) 
{
    // code
}
    
private void Save(Product product) 
{
    // code
}


Por que você precisa disso? O código continua a funcionar (mas não é certo). Você continua a entender seu código, mas o outro desenvolvedor entenderá menos seu código. Você não pode simplesmente adicionar alguns espaços em branco extras aos métodos comuns de uma vez (revisões de código são nosso inimigo), mas usar essa prática criará uma bagunça após algumas semanas de desenvolvimento ativo.



Outro benefício adicional de usar espaços extras em uma string é quando outros desenvolvedores confirmam a funcionalidade relacionada, seu IDE pode corrigir automaticamente a formatação. Na revisão do código, eles verão mil linhas vermelhas e verdes. Se você entendeu o que quero dizer;)



Pelo mesmo motivo, você pode configurar guias em seu IDE se usar espaços em seu projeto, e vice-versa.



Dica : não olhe para o código antes de confirmar.



Exemplo # 7



Ignore os desenvolvedores que podem ver espaços extras no código. Eles são perigosos para sua carreira.



product.Name = model.Name;
product.Price = model.Price;
product.Count =  model.Count;


Dica : conheça seu inimigo.



É difícil tornar seu código sem suporte. Quando você acumula muitos pequenos problemas, eles crescem sem a sua participação. Jovens desenvolvedores escreverão seu código de acordo com seus modelos. Um dia, durante uma revisão de código, você ouve "Que diabos?" do líder de sua equipe, e aqui você poderá usar o bordão: “O quê? Sempre fazemos isso ”, e mostramos a ele mil lugares no código onde está escrito da mesma maneira.



Diverta-se.



All Articles