logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Programando melhor: padrão de nomenclatura

Padrão de nomenclatura é basicamente definir como serão nomeadas as funções, variáveis, classes e como formatar o código fonte. Isso não muda absolutamente nada no código de máquina gerado pelo compilador, mas faz toda a diferença para os programadores que fazem o software. Essa é uma discussão calorosa, com muita gente tentando explicar porque seu padrão/estilo é o melhor. E, como em quase todas as discussões calorosas, ninguém está certo. Nenhum padrão de nomenclatura é melhor do que o outro. Um padrão é um padrão, ele só precisa existir e ser funcional. Dito isso, algumas coisas devem ser consideradas.

É necessário ter um padrão de nomenclatura. Não importa se é camelCase ou FluFFersCasE, é importante definir uma padrão, nem que seja informal. Discuta entre os desenvolvedores e defina. Quase todas as linguagens tem um padrão recomendado por quem faz a linguagem, e é recomendável (mas não obrigatório) usá-lo para que o seu código siga o mesmo estilo das bibliotecas padrão. C# e Java são exemplos de linguagens com padrões bem definidos, enquanto C e C++ têm um padrão mais informal. Na Wikipedia existe uma lista boa sobre o que deve ser padronizado. Para C++ eu costumo usar o seguinte:


#define MACRO_DE_DEBUG printf

 //
 // comentários explicativos e com uma linha em branco em cima
 // e outra embaixo. Não usar comentários em bloco: /*  */
 // Isso dificulta comentar código já que não pode haver um 
 // comentário dentro do outro
 // 
class UmaClasse
{
  int m_variavelDeClasse;
  char* m_ponteiro;
  ClasseComConstrutor m_c1, m_c2;

  enum UmEnum
  { Item1, Item2, Item3, Item4 };

public:

 UmaClasse() :
   m_c1("abc"),
   m_c2("def")
 {}

 void MetodoDeClasse(int a, int b, int c)
 {
   int variavelLocal = 10;
 }

 //
 // sem espaço antes ou depois dos parênteses ou chaves
 // e UM espaço depois das vírgulas
 // espaço entre os operadores matemáticos
 // chaves embaixo
 // 
 void OutroMetodoDeClasse(int a, int b, int c)
 {
   int a;
   a = 10;
   a += 5;
   ++a;
   a = b + c;

   for(int x = 0 ; x < 10 ; ++x)
   {
     if(x == 5)
       break;
      // 
      // nada de colocar tudo na mesma linha:
      // if(x == 5)break;
      //
   }

   int i = FuncaoComUmMonteDeParametros(
     "parametro1",
     "parametro2",
     "parametro3",
     "parametro4",
     "parametro5");

   MetodoDeClasse(a, b, c);
 }

 void SetVariavelDeClasse(int i)
 {
   m_variavelDeClasse = i
 }

 //
 // ainda estou pensando em abolir o Get, tipo
 // int variavelDeClasse();
 // mas ainda estou só pensando
 //
 int GetVariavelDeClasse()
 {
   return m_variavelDeClasse;
 }
};

Quando der manutenção em um programa, use o mesmo estilo de nomenclatura. Não importa se o padrão é porco, se você não gosta. É um padrão. Mude o projeto inteiro se tiver tempo para isso, mas não use dois padrões para o mesmo projeto. Isso torna o código mais porco ainda. Eu sei, é difícil de ler, difícil de entender, mas é assim que está feito. Sempre que pegar um código novo para modificar, tente entender qual é o padrão de nomenclatura e siga-o.

Use nomes claros e explicativos para as funções e variáveis. A função ApagaClientePendentes é melhor do que DelCliPen ou del_cliente_p. Os códigos fontes são feitos para seres humanos entenderem, não para que o computador entenda. Quem gera o que o computador entende é o compilador. E não se esqueça: se alguém não gostar dos nomes gigantescos, uma manhã de find/replace resolve o problema.

Não economize nos comentários. Já falei bastante sobre isso. O argumento de que os comentários podem ficar fora de sincronia e complicar mais a sua vida é totalmente furado. É o mesmo que dizer que não vai fazer uma parte do software porque ela pode ter bugs.


Em 27/11/2007 15:48, por Rodrigo Strauss


  
 
 
Comentários
Fernando Roberto da Silva | website | e-mail | em 28/11/2007 | #
Muito legal seu post e creio que meu comentário só poderá colocar mais lenha na fogueira desta discussão tão calorosa, mas me sinto obrigado a fazê-lo, só pra...

Manter padrão ajuda bastante, mas como você mesmo disse, é importante que todos sigam um padrão. Normalmente quando pego um fonte novo e que está todo bagunçado ou que não utiliza o meu padrão do coração, costumo migrar tudo.

Bem, na maioria dos lugares que trabalhei, tive que lidar com fontes de drivers sozinho, e isso me sempre me deu a oportunidade de adotar o meu padrão como sendo o oficial. Agora trabalhando com um projeto que tem dezenas de fontes com, e cada um com cerca de (3000~8000) linhas de código, já deu pra perceber que mudar o padrão seria algo que levaria um tempo relevante.

Desta vez não estou sozinho no projeto e felizmente um padrão é seguido. Não é o meu padrão, mas ao menos é um padrão. Mas o que me doi aos olhos é ver parte da equipe utilizar espaços e outra utilizar TABs.

Como um usuário árduo do Visual Studio a mais de uma década, estou habituado a utilizar o recurso que nos permite ver se determinado trecho está sendo utilizado por TAB ou por espaços. Confesso que esse recurso me dá pânico aqui, já que está tudo misturado.

Vocês devem estar pensando: "Bem, então simplesmente substitua tudo! O Visual Studio faz isso pra você.". É eu também pensei nisso, mas em um projeto deste tamanho, com mais de 20 membros espalhados pelo mundo, onde cada alteração é auditada, justificada e conferida por uma banca, fica só um pouquinho mais complicado.

É obvio que é para o bem de todos, mas vencer a inércia de um projeto, onde uma simples auteração de 2 linhas leva meses até chegar ao binário final, pode demorar ou mesmo acabar não acontecendo.

Agora que eu já chorei minhas pitangas, vocês podem usar este comentário para se lembrar de usar ou TAB ou espaço, mas não os dois, assim como foi recomendado pelo mano Strauss.

[]s,
Fernando.
marconate | website | em 28/11/2007 | #
msmo q eu programe em c#, gostei da idea dos comentários "linha em branco em cima e outra embaixo". nunca tinha pensado nisso...

eu achava q porq estou começando era chato com isso, bom perceber q os veteranos tem esses cuidados...

alem de tudo q vc disse, linha em branco sobrando tbm eh um #$%¨&...

mtas vezes implemento codigo pronto, concordo c vc q fica mais porco, mas eu não consigo deixar de seguir o padrao, q por sinal eu sigo o default do VS, sempre comento (principalmente sumary) e sigo padroes de identação e nomeclatura.

vlw

Antonio Meireles (Guto) | em 28/11/2007 | #
Excelente.

Usar um padrão de codificação é essencial, pena não ser realidade na maioria dos lugares.

O uso de tabs X espaços é mortal, se um projeto já usa um, não mude. Se o projeto é seu defina o que irá usar e não deixe que mudem. Código desalinhado/mal identado pode dificultar bastante o entendimento.

Também acho importante não misturar línguas.
Rodrigo Strauss | website | em 29/11/2007 | #
Tem razão. Quando não existe padrão eu sigo o "fazer algo parecido com o que fez o programador que começou isso".

Eu não me preocupo muito com tabs/espaços, mesmo porque nunca tive os mesmos problemas do Fernando (onde cada commit é uma árdua tarefa). Eu só mando um CTRL+A CTRL+K+F e o Visual Studio resolve.

Já vi alguns projetos com comentários metade em português e metade em inglês, tinha esquecido desse fato.
Thiago | e-mail | em 10/12/2007 | #
Qual a padronização que vocês usam? Deveria ser essa a primeira pergunta que um programador recem-contratado deveria fazer. Mas já vi grandes corporações q não utilizam de nenhuma padronização de desenvolvimento. Cada programador tem a sua. bom... uma duvida, talvez boba, surgiu... sabe aquele x, j, i q vc utiliza numa iteração? Pois bem, oq vcs acham? essa variáveis deveriam seguir padrão de nomenclatura de variaveis?

abraços!

------------------
» Thiago «
Rodrigo Strauss | website | em 10/12/2007 | #
Eu uso x/y para inteiros e i, i2 para iterators.
Débora Hernandez | em 08/08/2008 | #
Thiago,

Utilizo como padrão de nomenclatura como por exemplo uma variável do tipo int utilizo o int na frente do nome da variável se for string str e assim por diante, nada melhor do que ter um padrão no desenvolvimento de projetos fica muito mais organizado e fácil de entender, agora variáveis como i, x que utilizamos em um for, por exemplo, não utilizo nomenclatura.
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::