Algumas das afirmações abaixo são bastante pessoais, embora com alguma justificativa, e devem ser assim.
Tipos de comentário
Para a versão resumida ... Eu uso comentários para:
- comentários finais explicando campos nas estruturas de dados (além desses, eu realmente não uso comentários de linha única)
- comentários de várias linhas excepcionais ou orientados para o objetivo acima dos blocos
- documentação pública de usuário e / ou desenvolvedor gerada a partir da fonte
Leia abaixo os detalhes e (possivelmente obscuros) motivos.
Comentários finais
Dependendo do idioma, use comentários de uma linha ou comentários de várias linhas. Por que isso depende? É apenas uma questão de padronização. Quando escrevo código C, sou a favor do código ANSI C89 à moda antiga, por isso prefiro sempre /* comments */
.
Portanto, eu teria isso em C na maioria das vezes, e às vezes (depende do estilo da base de código) para idiomas com uma sintaxe semelhante a C:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
O Emacs é legal e faz isso comigo M-;
.
Se o idioma suportar comentários de linha única e não for baseado em C, estarei mais inclinado a usar os comentários de linha única. Caso contrário, receio que agora tenha adquirido o hábito. O que não é necessariamente ruim, pois me força a ser conciso.
Comentários de várias linhas
Não concordo com o seu preceito usando comentários de linha única, pois isso é mais visualmente atraente. Eu uso isso:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
Ou isso (mas não o faço com frequência, exceto em uma base de código pessoal ou principalmente em avisos de direitos autorais - isso é histórico para mim e vem da minha formação educacional. Infelizmente, a maioria dos IDEs estraga tudo ao usar o formato automático) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
Se for realmente necessário, gostaria de comentar em linha usando o que mencionei anteriormente para comentários finais, se fizer sentido usá-lo em uma posição final. Em um caso de retorno muito especial, por exemplo, ou para documentar switch
as case
instruções de a (raro, não uso a opção frequentemente), ou quando documento ramificações em um if ... else
fluxo de controle. Se esse não é um desses, geralmente um bloco de comentários fora do escopo que descreve as etapas da função / método / bloco faz mais sentido para mim.
Eu as uso excepcionalmente, exceto se estiver codificando em um idioma sem suporte para comentários na documentação (veja abaixo); Nesse caso, eles se tornam mais prevalentes. Mas, no caso geral, é realmente apenas para documentar coisas que são destinadas a outros desenvolvedores e são comentários internos que realmente precisam se destacar. Por exemplo, para documentar um bloco vazio obrigatório como um bloco "forçado" catch
:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
O que já é feio para mim, mas eu toleraria em algumas circunstâncias.
Comentários da documentação
Javadoc e cols.
Normalmente, eu os usava em métodos e classes para documentar versões que introduzem um recurso (ou alterá-lo), especialmente se for para uma API pública, e para fornecer alguns exemplos (com casos claros de entrada e saída e casos especiais). Embora, em alguns casos, um caso de unidade possa ser melhor para documentá-los, os testes de unidade não são necessariamente legíveis por humanos (não importa qual DSL você usa).
Eles me incomodam um pouco para documentar campos / propriedades, pois eu prefiro comentários finais para isso e nem toda estrutura de geração de documentação suporta comentários de documentação finais. O Doxygen faz, por exemplo, mas o JavaDoc não, o que significa que você precisa de um comentário importante para todos os seus campos. No entanto, posso sobreviver a isso, como as linhas Java são relativamente longas na maioria das vezes, então um comentário à parte me assustaria igualmente ao estender a linha além do meu limite de tolerância. Se Javadoc algum dia considerasse melhorar isso, eu ficaria muito mais feliz.
Código comentado
Eu uso a linha única por uma única razão, em idiomas do tipo C (exceto se estiver compilando para C estrito, onde eu realmente não os uso): para comentar coisas durante a codificação. A maioria dos IDEs terá alternado para comentários de linha única (alinhados no travessão ou na coluna 0), e isso se encaixa nesse caso de uso para mim. Usar a alternância para comentários com várias linhas (ou selecionar no meio das linhas, para alguns IDEs) tornará mais difícil alternar entre comentário / comentário com facilidade.
Mas, como sou contra o código comentado no SCM, isso geralmente é muito curto, porque vou excluir os pedaços comentados antes de confirmar. (Leia minha resposta a esta pergunta em "comentários editados por linha e SCMs" )
Estilos de comentário
Eu costumo escrever:
- complete frases com gramática correta (incluindo pontuação) para comentários na documentação, pois eles devem ser lidos posteriormente em um documento da API ou mesmo como parte de um manual gerado.
- bem formatado, mas mais relaxado na pontuação / limites para blocos de comentários de várias linhas
- blocos finais sem pontuação (por causa do espaço e geralmente porque o comentário é breve, que se parece mais com uma declaração entre parênteses)
Uma nota sobre programação alfabetizada
Talvez você queira se interessar por programação alfabética , conforme apresentado neste artigo por Donald Knuth .
O paradigma da programação alfabetizada representa [...] um afastamento da escrita de programas da maneira e ordem impostas pelo computador e, em vez disso, permite que os programadores desenvolvam programas na ordem exigida pela lógica e pelo fluxo de seus pensamentos. 2 Programas alfabetizados são escritos como uma exposição ininterrupta da lógica em uma linguagem humana comum, como o texto de um ensaio [...].
As ferramentas de programação alfabetizada são usadas para obter duas representações de um arquivo de origem alfabetizado: uma adequada para compilação ou execução adicional por um computador, o código "emaranhado" e outra para exibição como documentação formatada, que se diz "tecida" do fonte alfabetizada.
Como observação e exemplo: A estrutura JavaScript underscore.js , apesar da não conformidade com meu estilo de comentário, é um bom exemplo de uma base de código bem documentada e de uma fonte anotada bem formada - embora talvez não seja a melhor para usar como uma referência de API).
Estas são convenções pessoais . Sim, eu posso ser estranho (e você também). Tudo bem, desde que você siga e cumpra as convenções de código de sua equipe ao trabalhar com colegas ou não ataque radicalmente suas preferências e coabite bem. Faz parte do seu estilo, e você deve encontrar a linha tênue entre o desenvolvimento de um estilo de codificação que o define como codificador (ou como seguidor de uma escola de pensamento ou organização com a qual você tem uma conexão) e respeitar a convenção de um grupo por consistência .
:3,7 Align //
para alinhar comentários nas linhas 3-7.