As dicas de tipo docblock são redundantes ao usar a digitação estrita


12

Eu tenho uma base de código privada bastante grande que evoluiu por cerca de dez anos. Não estou usando o phpDocumentor, mas como o uso das seções docblock se tornou o padrão em projetos de código aberto, adotei a escrita de docblocks para todos os métodos públicos no meu repositório. A maioria dos blocos contém apenas uma pequena descrição e dicas de tipo para todos os parâmetros e o tipo de retorno.

Com a chegada da análise estática, essas dicas de tipo me ajudaram bastante a encontrar inconsistências e possíveis erros. Ultimamente eu converti toda a base de código (agora rodando no PHP7.2) para ter todos os parâmetros e retornar valores com dicas de tipo sempre que possível, usando as dicas de tipo do PHP. E agora eu estou pensando ... Essas dicas de tipo de docblock não são redundantes? Ele exige bastante trabalho para manter todos os docblocks em sincronia com o código em constante mudança e, como eles não adicionam nenhuma informação nova, fico imaginando se é melhor removê-los completamente ou não.

Por um lado, remover a documentação é ruim, mesmo quando é redundante. No outro, eu realmente sinto vontade de quebrar o princípio diário de não digitar coisas que já está com dicas.


Removido o "Eu adoraria ouvir algumas opiniões". declaração, pois é o tipo de coisa que pode levar a que uma boa pergunta seja fechada como baseada em opinião.
David Arno

2
@DavidArno: Ah, obrigado. Eu gostaria de obter alguns insights baseados factuais então :)
Xatoo

Respostas:


8

As informações que podem ser encontradas no código não devem ser duplicadas nos comentários.

Na melhor das hipóteses, é um esforço desperdiçado para mantê-los sincronizados. Provavelmente, eles ficarão fora de sincronia eventualmente. Nesse ponto, eles são apenas confusos.

Se você observar o equivalente ao DocBlock em linguagens estaticamente tipadas (por exemplo, Java, C #), verá que os comentários do documento não contêm informações de tipo. Na medida em que este for o caso no seu código PHP, eu recomendo fortemente que sigam o exemplo. Obviamente, onde dicas de tipo não podem ser aplicadas, um comentário ainda é sua melhor alternativa.

Isso não é relevante para o PHP, mas informações duplicadas do tipo podem fazer sentido quando o tipo é implicitamente inferido (por exemplo, Haskell).


5

Sim, os docblocks se tornaram redundantes com o php 7.

A maior parte do tempo na codificação é gasta lendo, portanto, ter que ler a mesma coisa duas vezes afeta sua produtividade. Além disso, facilita a falta de comentários realmente importantes.

Não escrevo mais docblocks, exceto quando quero digitar uma matriz de um determinado tipo (por exemplo, @return int[]ou @param SomeStatus[] $statusList) ou quando quero adicionar um comentário sobre o método, parâmetros ou valor de retorno. Achei importante desabilitar a inspeção do phpstorm que é acionada quando você não tem todos os parâmetros e retorna tipos em um docblock se você tiver um docblock.


3

O código e a documentação geralmente têm públicos diferentes: a documentação é para usuários dessa função. Eles não deveriam ter que olhar o código para entender os tipos. Portanto, a documentação deve incluir todas as informações necessárias, incluindo os tipos.

Em alguns sistemas, não é necessário especificar um tipo de parâmetro na documentação porque o tipo pode ser obtido do código. O PHPDoc não é esse sistema. Em vez disso, a @paramtag está documentada que

Quando fornecido, DEVE conter um tipo para indicar o que é esperado

O “bastante trabalho para manter todos os docblocks sincronizados com o código em constante mudança” é um pouco reduzido, porque o PHPDoc verificará as dicas de tipo de documentação em relação às dicas de tipo de código. Esse é um tipo de análise de fiapos / estática, portanto, faça da geração de sua documentação parte do seu pipeline de teste automatizado.

Outra pergunta que você pode querer perguntar é por que essas funções são documentadas nesses detalhes quando estão “sempre mudando”. A motivação usual é criar um manual de referência HTML de suas interfaces. Porém, se a documentação nunca for lida fora de um IDE, ou se você não tiver interfaces estáveis ​​nas quais a documentação faça sentido, os blocos de documentos detalhados serão desnecessários ou até enganosos. Pode ser melhor escrever apenas um resumo e adiar documentos completos até chegar a um design estável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.