C#  - Escrevendo um código elegante


 Hoje vou apresentar algumas dicas para escrever um código C# mais elegante.

Escrever código não é uma tarefa fácil e, quando se trata de escrever código de qualidade, torna-se ainda mais difícil.

Algo que devemos  lembrar é que na programação temos várias maneiras de fazer algo e, desde que funcione, não significa que essa maneira seja certa ou errada. Mas além de simplesmente “funcionar”, nossa aplicação deve ser coesa e conter uma boa sintaxe.

Para atingir este objetivo a seguir vou apresentar alguns exemplos de como melhorar ainda mais sua escrita na linguagem C# e aumentar a qualidade do seu código.

Convenções de Nomenclatura

Não existe uma norma padrão que deve ser obrigatoriamente usada na padronização de código. Na verdade existem várias normas e nenhuma delas esta totalmente errada ou totalmente certa. Seguir alguma regra é melhor do que não seguir nenhuma, assim o importante é você adotar uma abordagem e segui-la.

Se individualmente a padronização já é difícil imagem em uma equipe de desenvolvedores trabalhando no mesmo projeto ?

Quando se tem uma equipe com diferentes habilidades e gostos é mais difícil obter uma padronização pois tem que se gastar um tempo para convencer todos a seguir os mesmos padrões.

As convenções de nomenclatura referem-se à declaração de nomes de objetos. Você deve seguir alguma convenção de nomenclatura para ter um código agradável e coerente ao nomear seus objetos.

Aqui não existe uma regra universal que deve sempre ser seguida mas em geral para declarar uma variável que retorna uma única entidade/objeto, usamos um nome simples.

Para declarar uma variável que retorna múltiplas entidades/objetos, podemos pluralizar adicionar o sufixo “List” para que possamos identificar facilmente que ela retornará uma lista de classes/objetos:

Para declarar uma variável privada utilize o sublinhado (_)

Outra regra geral é usar a seguinte padronização :

1. Usar PascalCase para nomes de classes
2. Usar PascalCase para nomes de métodos
3. Usar CamelCase para variáveis e parâmetros de métodos

CamelCase : É a denominação em inglês para a prática de escrever palavras compostas ou frases, onde a primeira letra da primeira palavra é iniciada com minúscula e unidas sem espaços.

PascalCase :  Escreve palavras compostas ou frases montadas com palavras onde a primeira letra de cada palavra é iniciada com maiúscula.

A seguir temos uma tabela com os recursos e a indicação para padronização a ser aplicada:

Nome do recurso Case a ser aplicado
Variáveis camelCase
Classes PascalCase
Construtor PascalCase
Propriedades PascalCase
Delegate PascalCase
Enum PascalCase
Argumentos camelCase
Método PascalCase
Constantes PascalCase
Campo camelCase

Otimização da sintaxe usada

Se você conhece a linguagem C# sabe que existem mais de uma forma de realizar uma tarefa e neste quesito sempre podemos melhorar o código otimizando a sintaxe usada.

Vejamos alguns exemplos:

1- Métodos que retornam um resultado

2- Verificar por condições de null ou vazio (empty)

3- Verificar um valor null

A verificação do Null a partir do C# 9.0 pode usar a palavra-chave And e o Pattern Not.

A partir do C# 9.0, podemos combinar a expressão is com o padrão lógico not, que é poderoso se você quiser verificar se um objeto NÃO é nulo. Antes do C# 9.0 você tinha que usar a expressão is como abaixo para verificar se um objeto não é nulo:


  if (!(nome is null)) { }   

Para facilitar a legibilidade e o otimizar a sintaxe podemos usar a sintaxe abaixo a partir do C# 9.0:


  if (nome is not null)) { }   

4- Concatenação de strings

5- Usando a instrução switch (a partir do C# 8.0)

Validação de tipos de dados primitivos

Com a correria do dia a dia, às vezes esquecemos que existem métodos disponíveis para validar tipos de dados primitivos como System.Int32.

Quando você precisar fazer essas validações, evite usar métodos personalizados. Em vez disso, use os métodos já disponíveis na linguagem para isso.

Otimizando consultas com LINQ

A LINQ é o nome de um conjunto de tecnologias com base na integração de recursos de consulta diretamente na linguagem C#.

A LINQ simplifica as consultas oferecendo um modelo consistente para trabalhar com dados em vários tipos de fontes e formatos. Em uma consulta LINQ, você está sempre trabalhando com objetos. Você usa os mesmos padrões básicos de codificação para consultar e transformar dados em documentos XML, bancos de dados SQL, conjuntos de dados ADO.NET, coleções .NET e qualquer outro formato para o qual um provedor LINQ esteja disponível.

Abaixo vamos obter uma lista de “Bons Preços” passando por uma lista de “Empresas” que possuem “Produtos” com vários “Preços de Mercado”.

Se o preço de mercado for menor que 100, adicionamos o produto à lista de bons preços e o devolvemos no final da expressão.

Abaixo temos uma abordagem padrão que pode ser considerada um tanto procedural :

public BomPreco GetBomPrecos(List<Empresa> empresas)
{
   BomPreco bomPrecos = new BomPreco();

   foreach (Empresa emmpresa in empresas)
   {
         foreach (Produto produto in empresa.Produtos)
         {
            if (produto.ValorMercado < 100)
            {
                bomPrecos.Produtos.Add(produto);
            }
         }
    }
   return bomPrecos;
}

Podemos melhorar este código usando LINQ:

No código acima podemos também pode usar a seguinte consulta :

var resultado = from empresa in empresas
                          from produto in empresa.Produtos
                          where produto.ValorMercado < 100
                          select produto;

bomPrecos.Produtos = resultado.ToList();

Independente se você é novo na linguagem C# ou não você sempre vai poder melhorar e otimizar o seu código para ter um código mais elegante.

E estamos conversados...

"O Senhor estabeleceu o seu trono nos céus, e como rei domina sobre tudo o que existe."
Salmos 103:19

Referências:


José Carlos Macoratti