C# - Convenções de nomenclatura


 Neste artigo vou apresentar as principais convenções de nomenclatura usadas na linguagem C#.

Na linguagem C#, existem várias convenções de nomenclatura e padrões de "casing" (formatação de letras maiúsculas/minúsculas) usados para nomear métodos, classes, propriedades, variáveis e outros elementos.

A seguir vou apresentar as principais convenções de nomenclatura e padrões casing.

Pascal Case

Na convenção Pascal Case a primeira letra de cada palavra em um nome é maiúscula e não há espaços entre as palavras.

Ex: NomeCliente é um exemplo de variável que usa a convenção Pascal Case, e, é essa convenção que é mais usada para nomear classes, propriedades e métodos em C#.

Quando usar o Pascal Case:

Exemplos:  MinhaClasse, CalcularTotal , NomeCliente, DiaSemana, etc.

public class Cliente
{
    // ... membros da classe
}
public class PedidoDeCompra
{
    // ... membros da classe
}
public class ServicoDeAutenticacao
{
    // ... membros da classe
}
public interface IRepositorioDeCliente
{
    // ... membros da interface
}
public interface IServicoDeEmail
{
    // ... membros da interface
}

public class Calculadora
{
    public int Somar(int a, int b)
    {
        return a + b;
    }
    public decimal CalcularValorTotal(decimal precoUnitario, int quantidade)
    {
        return precoUnitario * quantidade;
    }
    public string ObterNomeCompleto(string primeiroNome, string sobrenome)
    {
        return $"{primeiroNome} {sobrenome}";
    }
}
public class Produto
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public decimal Preco { get; set; }
    public bool EstaAtivo { get; set; }
}
public enum StatusPedido
{
    Pendente,
    Processando,
    Enviado,
    Entregue,
    Cancelado
}
public enum DiaDaSemana
{
    Domingo,
    SegundaFeira,
    TercaFeira,
    QuartaFeira,
    QuintaFeira,
    SextaFeira,
    Sabado
}

Camel Case

Na convenção Camel Case a primeira letra da primeira palavra é minúscula e a primeira letra de cada palavra subsequente é maiúscula. Não há espaços entre as palavras. Por exemplo, nomeCliente é um exemplo de uso da convenção Camel Case. Esta convenção é mais usada para nomear variáveis locais e parâmetros de métodos.

Quando usar a Camel Case:

// Exemplo de Pascal Case para uma classe
public class Cliente { ... }
// Exemplo de Pascal Case para uma propriedade
public string NomeCliente { get; set; }
// Exemplo de Pascal Case para um método
public void CalcularTotalPedido() { ... }
// Exemplo de Camel Case para uma variável local
public void ProcessarPedido(int quantidade)
{
    decimal precoUnitario = 10.50m; // Camel Case
    decimal valorTotal = quantidade * precoUnitario; // Camel Case
    // ...
}

Snake Case

Snake Case é outro estilo de formatação de nomenclatura usado em programação e marcação. Nesse estilo, as palavras são separadas por underscores (_). Aqui estão algumas regras de nomenclatura em Snake Case:

  1. Todas as letras no identificador são convertidas para minúsculas.
  2. Palavras separadas por underscores: As palavras são separadas por underscores (_).

Por exemplo, se tivéssemos um identificador para um nome de variável ou um nome de arquivo, "exemplo de nome" seria formatado em Snake Case como "exemplo_de_nome".

O Snake Case é comumente usado em linguagens como Python, PostgreSQL e em algumas convenções de codificação em C++. Além disso, é usado em sistemas operacionais Unix para nomes de arquivos.

Quando usar o Snake Case:

Kebab Case

Kebab Case é um estilo de formatação de nomenclatura que é usado principalmente em linguagens de programação e marcação. Nesse estilo, as palavras são separadas por hífens (-).

Aqui estão algumas regras de nomenclatura em Kebab Case:

  1. Todas as letras são minúsculas: Todas as letras no identificador são convertidas para minúsculas.
  2. Palavras separadas por hífens: As palavras são separadas por hífens ("-").

Por exemplo, se tivéssemos um identificador para um nome de variável ou um nome de arquivo, "exemplo de nome" seria formatado em Kebab Case como "exemplo-de-nome".

Vale ressaltar que o Kebab Case é frequentemente usado em URLs, nomes de arquivos em sistemas operacionais Unix e também em linguagens como HTML, CSS e JavaScript, onde é uma convenção popular para nomes de classes, IDs e atributos.

Quando usar a Kebab Case:

wwwroot/
├── css/
│ └── estilos-principais.css
├── js/
│ └── script-de-validacao.js
├── imagens/
│ └── logo-da-empresa.png
└── index.html

O uso direto de Kebab Case para variáveis, classes, métodos ou propriedades não é uma prática comum nem recomendada em C#. O compilador C# aceitará identificadores com hífens, mas eles seriam interpretados como uma subtração, não como parte do nome.

Em resumo, você pode encontrar Kebab Case em contextos externos ao código C# propriamente dito, como URLs, nomes de arquivos estáticos ou dados de configuração de outros sistemas.

Convenções de nomenclatura usadas no C#

As convenções de nomenclatura mais usadas na linguagem C# são as seguintes:
  1. Pascal Case: É amplamente usado para nomear classes, métodos, propriedades, enums e namespaces. A primeira letra de cada palavra é maiúscula, sem espaços.
    Exemplo: ServicoCliente, CalcularValorTotal, StatusPedido
     
  2. Camel Case: É frequentemente usado para nomear parâmetros de métodos, variáveis locais e campos privados. A primeira letra da primeira palavra é minúscula, e as palavras subsequentes têm a primeira letra maiúscula.
    Exemplo: totalContador, dataPedido, listaCliente
     
  3. UpperCase para Constantes: Nomes de constantes são escritos completamente em letras maiúsculas, com palavras separadas por underscores.
    Exemplo: MAX_VALUE, PI_VALUE
     
  4. Pascal Case para Métodos e Propriedades: Usado para nomear métodos e propriedades.
    Exemplo: CalcularValor(), Nome, PrecoProduto
     
  5. Evitar Abreviações Obscuras: Evite abreviações que possam ser confusas para outros desenvolvedores. Use nomes descritivos que facilitem a compreensão do código.
     
  6. Utilizar Nomes Descritivos: Escolha nomes descritivos e significativos que comuniquem claramente a função ou a finalidade do elemento.
     
  7. Evitar Nomes Genéricos: Evite nomes muito genéricos como Data, Value, Object. Escolha nomes mais específicos.
     
  8. Verbo + Substantivo para Métodos: Métodos geralmente são nomeados com um verbo seguido de um substantivo ou frase descritiva.
    Exemplo: GetClientePorId(int id), CalcularPrecoTotal()
     
  9. Singular ou Plural Adequado: Escolha entre singular e plural conforme a semântica do nome. Por exemplo, uma lista de clientes pode ser customerList ou customers.
     
  10. Underscore Prefix para Campos Privados: Alguns desenvolvedores preferem adicionar um underscore (_) como prefixo para indicar campos privados.
    Exemplo: _privateField, _databaseConnection
  1. Pascal Case para Atributos: Atributos normalmente seguem a convenção de Pascal Case.
    Exemplo: [Serializable], [Required]
  1. Convenções de Nome de Evento: Eventos normalmente seguem as convenções de nome de métodos, mas usam um verbo no passado para indicar algo que aconteceu.
    Exemplo: ButtonClicked, OrderPlaced
  2. Para interfaces : A recomendação para a convenção é prefixar interfaces com a letra I (ex: IClienteService).
  3. Async/Await  : Para métodos assíncronos a convenção indica adicionar o sufixo Async a métodos assíncronos (ex: BuscarDadosAsync).
  4. Para namespaces : A convenção para namespaces também segue o Pascal Case e geralmente refletem a estrutura da organização ou funcionalidade.

Lembre-se de que aderir a convenções de nomenclatura ajuda na legibilidade e manutenção do código. Se você estiver trabalhando em um projeto em equipe, siga as convenções de nomenclatura estabelecidas pelo time para manter a consistência no código-fonte.

Escolher qual a convenção usar em seu projeto pode ajudar a tornar seu código mais legível e fácil de entender. Ao escolher uma convenção de nomenclatura considere o contexto em que ele será usado e se ele está em conformidade com quaisquer convenções ou diretrizes de nomenclatura.

Seguindo essas práticas recomendadas, você pode criar um código mais fácil de ler e manter.

E estamos conversados...

"Porque para mim o viver é Cristo, e o morrer é ganho."
Filipenses 1:21

Referências:


José Carlos Macoratti