Atualizar
Minha resposta entre aspas para ênfase:
É minha convicção que a resposta que afirma que os comentários não devem ser abordados nas normas de codificação e, em seguida, lista um conjunto de perguntas defensivas para combatê-la, é a única resposta correta.
A questão aqui é que um padrão de codificação é apenas isso, um padrão . Idéias extremamente subjetivas não devem estar em um padrão de codificação . Pode ser um guia de práticas recomendadas, mas esse guia não pode ser usado contra um desenvolvedor durante a Revisão de Código. Na minha opinião pessoal, um Padrão de Codificação deve estar o mais próximo possível de Automatizado. Há muito tempo desperdiçado nas Revisões de Código, discutindo sobre nomeação, espaçamento, guias, colchetes, comentários etc. etc. quando tudo pode ser automatizado. Até a resposta tables
e chairs
pode ser automatizada. Os LINT permitem dicionários, verificações de maiúsculas por conceito (variável, função, método, classe etc.).
Até a verificação JavaDoc pode ser implementada por um Robot LINT'er antes que uma solicitação de recebimento seja aceita. Muitos projetos de código aberto fazem exatamente isso. Você envia sua solicitação de recebimento, o código é criado com um arquivo Travis-CI, incluindo a Static Analysis, e deve passar por todos os padrões de codificação que podem ser expressos objetivamente. Nenhum carrilhão humano fala sobre "fazê-lo incorretamente" ou não "fornecer valor" com um comentário, ou a maneira errada de nomear variáveis, etc. Essas discussões não têm valor e são melhor deixar para um robô de terceiros que pode suportar o impacto de nossa codificação emocional.
Para realmente responder à pergunta, teríamos que abordar como escrever uma Norma que aborda como responder à seguinte pergunta: Esse comentário forneceu valor? Um padrão de codificação não pode ditar o 'valor' de um comentário. Portanto, torna-se necessário que um humano passe por essa lista de verificação. A simples menção de comentários em um Padrão de codificação cria uma lista de verificação que o Pôster original deseja evitar.
É por isso que os comentários geralmente não são processados pelo compilador e removidos. Seu valor não pode ser determinado. O comentário em questão é valioso; sim ou não?. Responder a esta pergunta é NP-difícil. Somente os humanos têm a chance de responder adequadamente, e mesmo assim, só pode ser respondido no momento em que é lido, pela pessoa que está lendo; onde o valor desse comentário é afetado pelo clima, sua vida familiar, a última reunião em que eles acabaram de participar e não terminaram bem, a hora do dia, a quantidade de café que tomaram. Confio que a imagem está se tornando mais clara.
Como isso pode eventualmente ser expresso adequadamente em qualquer Padrão? Um padrão não é útil, a menos que possa ser aplicado de forma consistente e justa, onde justo é mais sobre objetividade e não emocional.
Concordo que um Padrão de Codificação deve permanecer o mais Objetivo possível. A maneira como as variáveis são chamadas de objetivo IS. Eles podem ser facilmente verificados em um dicionário quanto à ortografia, estrutura gramatical e revestimento. Qualquer coisa além disso é uma "partida irritante" que é vencida pela pessoa com mais poder ou por "surra". Algo que eu, pessoalmente, luto por NÃO fazer.
Quando eu comento, sempre comento conversando com o meu eu futuro na terceira pessoa. Se eu voltar a esse código em cinco anos, o que eu precisaria saber? O que seria útil, o que seria confuso e o que estaria desatualizado com o código? Existe uma diferença entre o código de documentação para gerar uma API pública pesquisável e o código de comentário que agrega valor a terceiros desconhecidos, mesmo que esse terceiro seja você mesmo.
Aqui está um bom teste decisivo. Se você era o único no projeto. Você sabia que seria o único no projeto. O que estaria no seu padrão de codificação? Você deseja que seu código seja limpo, auto-explicativo e compreensível para si mesmo no futuro. Você gostaria de fazer uma revisão de código sobre por que não colocou um comentário em todas as linhas? Você revisaria todos os comentários criados nos 100 arquivos que fez check-in? Se não, então por que forçar os outros?
Algo que acredito estar faltando nessas discussões é que o Future You também é um desenvolvedor deste projeto. Ao perguntar sobre valor, amanhã você também é uma pessoa que pode derivar valor do comentário. Então o tamanho da equipe, na minha opinião, não importa. A experiência da equipe não importa, ela muda com muita frequência.
Nenhuma quantidade de código de comentário revisando isso impede que o marcapasso caia e mate um paciente. Depois de falar sobre um comentário que afeta o código, agora você está falando sobre o código e não o comentário. Se tudo o que é necessário é um comentário que falta para matar alguém, há algo mais que cheira no processo.
A solução para esse tipo de maneira rigorosa de codificação já foi fornecida como uma metodologia para escrever o próprio software. E não tem nada a ver com comentários. O problema dos comentários é que eles NÃO têm impacto na maneira como o produto funciona. Os melhores comentários do mundo não podem impedir o software de travar quando incorporado a um pacemaker. Ou ao medir os sinais elétricos com um eletrocardiograma portátil.
Temos dois tipos de comentários:
Comentários legíveis por máquina
Estilos de comentário como Javadoc, JSDoc, Doxygen etc. são todas as formas de comentar a interface pública que um conjunto de códigos fornece. Essa interface só pode ser usada por outro desenvolvedor (código proprietário de uma equipe de duas pessoas), um número desconhecido de desenvolvedores (por exemplo, JMS) ou por um departamento inteiro. Esse código pode ser lido por um processo automatizado que produz uma maneira diferente de ler esses comentários, como HTML, PDF e outros.
É fácil criar um padrão para esse tipo de comentário. Torna-se um processo objetivo de garantir que todos os métodos, funções e classes publicamente invocáveis contenham os comentários necessários. Cabeçalhos, parâmetros, descrição et. el. Isso é para garantir que seja fácil para outra equipe encontrar e usar o código.
Estou fazendo algo que parece louco, mas não é realmente
Esses comentários estão aqui para ajudar os outros a entender por que esse código foi escrito de uma certa maneira. Talvez haja um erro numérico nos processadores nos quais o código está sendo executado e ele sempre é arredondado para baixo, mas os desenvolvedores geralmente lidam com o código que é arredondado. Portanto, comentamos para garantir que um desenvolvedor que toque no código entenda por que o contexto atual está fazendo algo normalmente pareceria irracional, mas, na realidade, foi escrito dessa maneira de propósito.
Esse tipo de código é o que causa tantos problemas. Normalmente, ele não é comentado e é encontrado mais tarde por um novo desenvolvedor e 'corrigido'. Quebrando assim tudo. Mesmo assim, os comentários existem apenas para explicar o porquê de não impedir que algo realmente se quebre.
Comentários não podem ser invocados
Comentários são em última análise, inútil e não pode ser confiável. Os comentários normalmente não alteram a maneira como os programas são executados. E se o fizerem, seu processo está causando mais problemas do que deveria. Comentários são reflexões posteriores e nunca podem ser outra coisa senão. O código é tudo o que importa, pois é tudo o que é processado pelo computador.
Isso pode parecer estúpido, mas tenha paciência comigo. Qual dessas duas linhas realmente importa?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
Neste exemplo, o que importa é que não temos idéia do que é 'n', não há nenhuma verificação para n ser 0 E, mesmo que houvesse, nada impede que um desenvolvedor coloque n = 0
APÓS a verificação para 0. Assim, o comentário é inútil e nada automatizado pode capturar isso. Nenhum padrão pode entender isso. O comentário, embora bonito (para alguns), não tenha relação com o resultado do produto.
Desenvolvimento Orientado a Testes
O que tem um resultado no produto? As indústrias nas quais o código que está sendo escrito pode literalmente salvar ou matar alguém precisam ser rigorosamente verificadas. Isso é feito através de revisões de código, revisões de código, testes, testes, revisões de código, testes de unidade, testes de integração, testes, teste, meses de testes, revisões de código e testes individuais, teste, revisões de código, testes e, talvez, finalmente entrando em produção. Comentários não têm nada a ver com nada disso.
Eu preferiria codificar sem comentários, especificações, testes unitários que verificassem as especificações, estudos dos resultados da execução do código no dispositivo de produção e código bem documentado que nunca havia sido testado, nem tinha nada para comparar o código. código contra.
A documentação é boa quando você está tentando descobrir por que alguém fez algo de uma certa maneira; no entanto, ao longo dos anos, descobri que a documentação é normalmente usada para explicar por que algo 'inteligente' foi feito, quando realmente não precisava. para ser escrito assim.
Conclusão
Se você trabalha em uma empresa que exige que cada linha seja comentada, garanto que pelo menos dois dos engenheiros de software do projeto já escreveram um programa de documentos automáticos em Perl, Lisp ou Python, que determina a idéia geral do que a linha está fazendo , depois adiciona um comentário acima dessa linha. Como isso é possível, significa que os comentários são inúteis. Encontre os engenheiros que escreveram esses scripts para documentar automaticamente o código e usá-los como evidência do motivo pelo qual o 'Comentário sobre cada linha' está perdendo tempo, não fornecendo valor e potencialmente prejudicial.
Por um lado, eu estava ajudando um amigo próximo com uma tarefa de programação. Seu professor havia estabelecido um requisito para que todas as linhas fossem documentadas. Então eu posso ver de onde viria esse processo de pensamento. Apenas pergunte a si mesmo, o que você está tentando fazer, e isso é a coisa certa? Então pergunte a si mesmo; Existe alguma maneira de 'jogar' o sistema com esse processo? Se houver, será que realmente está agregando valor? Não se pode escrever automaticamente testes de unidade, que testam esse código e atendem a uma determinada especificação; se possível, não seria algo ruim.
Se um dispositivo tiver que funcionar sob certas condições, porque estará dentro de um ser humano, a única maneira de garantir que não os matará são anos de testes, revisão por pares, ensaios e NUNCA MAIS NUNCA alterando o código novamente. É por isso que a NASA ainda está usando hardware e software tão antigo. Quando se trata de vida ou morte, você não apenas 'faz uma pequena alteração e faz o check-in'.
Comentários não têm nada a ver com salvar vidas. Comentários são para humanos, eles cometem erros, mesmo quando escrevem comentários. Não confie nos humanos. Portanto, não confie nos comentários. Comentários não são sua solução.