Introdução ao JSDoc
JSDoc é uma ferramenta de geração de documentação para código JavaScript. Ele é baseado em comentários de bloco (/** */
) no código-fonte e usa tags especiais para descrever as funções, classes, métodos, variáveis e outros elementos do seu código. O JSDoc extrai essas informações e gera uma documentação HTML estruturada e fácil de ler para o seu código.
A documentação gerada pelo JSDoc pode ser usada como uma referência interna para equipes de desenvolvimento, como uma documentação para usuários finais de bibliotecas e módulos, ou como uma forma de garantir a consistência da documentação em projetos de grande escala. Além disso, a documentação gerada pelo JSDoc pode ser consumida por ferramentas de linting, como o ESLint, para ajudar a garantir a qualidade do código.
Ao escrever documentação com o JSDoc, você pode descrever as entradas e saídas de funções, o propósito de variáveis e constantes, e outras informações relevantes para o seu código. Além disso, você pode usar as tags do JSDoc para adicionar informações adicionais, como referências a recursos externos, informações de versão e autoria, e muito mais.
Vantagens no uso do JSDoc
- Documentação clara e consistente: JSDoc fornece uma estrutura padrão para documentar o código JavaScript, o que ajuda a manter a documentação clara e consistente ao longo do tempo.
- Facilidade de leitura: A documentação gerada pelo JSDoc é fácil de ler e navegar, pois é formatada de maneira clara e objetiva.
- Melhoria da colaboração: JSDoc ajuda a tornar o código mais compreendível para outros desenvolvedores, o que facilita a colaboração em projetos de equipe.
- Ferramentas de inteligência de código: A documentação gerada pelo JSDoc pode ser usada por ferramentas de inteligência de código para fornecer informações sobre o código, como dicas de autocompletar e definições de funções.
- Aumento da qualidade do código: JSDoc incentiva a documentação de código de alta qualidade, o que pode ajudar a prevenir erros e melhorar a manutenibilidade do código.
Principais blocos de tags do JSDoc
@param
: Usada para documentar os parâmetros de entrada de uma função.@returns
: Usada para documentar o valor retornado por uma função.@throws
: Usada para documentar qualquer exceção que possa ser lançada por uma função.@type
: Usada para documentar o tipo de retorno de uma função ou o tipo de uma variável.@see
: Usada para fornecer referências a outros elementos da documentação.@since
: Usada para indicar a partir de qual versão de um software uma determinada funcionalidade está disponível.@author
: Usada para indicar o autor de uma determinada função ou módulo.@version
: Usada para indicar a versão atual de um software.@deprecated
: Usada para indicar que uma determinada função ou módulo foi descontinuado e não deve ser usado.@todo
: Usada para indicar tarefas pendentes relacionadas ao desenvolvimento de um software.
Essas são apenas algumas das principais tags do JSDoc, e existem muitas outras que podem ser usadas para documentar o código de uma maneira mais completa e detalhada. Além disso, o JSDoc suporta a criação de tags personalizadas para atender às necessidades específicas de um projeto.
Exemplo contendo os principais blocos de tags
/** * Calcula o fatorial de um número. * * @param {number} num - O número cujo fatorial será calculado. * @returns {number} O fatorial do número. * @throws {Error} Se o argumento não for um número válido. * @see https://pt.wikipedia.org/wiki/Fatorial * @since 1.0.0 * @author João Silva * @version 2.0.0 * @deprecated Use a função factorialFromModule em vez desta função. * @todo Adicionar suporte para cálculo de fatorial de números decimais. */ function factorial(num) { if (typeof num !== 'number' || isNaN(num) || num < 0) { throw new Error('O argumento deve ser um número válido.'); } let result = 1; for (let i = 2; i <= num; i++) { result *= i; } return result; }
Neste exemplo, as tags @param
, @returns
, @throws
, @see
, @since
, @author
, @version
, @deprecated
e @todo
são usadas para documentar uma função que calcula o fatorial de um número. A descrição geral da função é fornecida como um comentário de bloco no início da função. Além disso, as tags são usadas para fornecer informações detalhadas sobre os parâmetros de entrada, o valor retornado, as exceções que podem ser lançadas, referências a recursos externos, informações sobre a versão e o autor, a data da descontinuação da função e uma tarefa pendente relacionada ao desenvolvimento futuro.
Se o mouse for passado sobre a função ou seja qual tenha sido a sua documentação ele mostra conforme as imagens abaixo o resultados das Tags informadas:
Requisitos necessários para o aprendizado da ferramenta
- JavaScript: O JSDoc é uma ferramenta para documentar código JavaScript, então é importante ter uma compreensão sólida da sintaxe e dos conceitos básicos do JavaScript antes de começar a usar o JSDoc.
- Comentários de bloco: O JSDoc usa comentários de bloco (
/** */
) para descrever o seu código. É importante saber como escrever comentários de bloco e como eles são lidos pelo JSDoc. - Tags JSDoc: O JSDoc usa várias tags para descrever o seu código, como @param, @returns, @typedef, entre outras. É importante entender as diferentes tags disponíveis e como usá-las para documentar o seu código.
- Convenções de documentação: O JSDoc é amplamente utilizado e existem convenções estabelecidas para a escrita de documentação. É importante se familiarizar com essas convenções antes de começar a usar o JSDoc para garantir que a documentação seja clara e fácil de ler.
- Ferramentas de geração de documentação: O JSDoc pode ser usado com várias ferramentas de geração de documentação, como o CLI JSDoc ou plugins para editores de código, como o Visual Studio Code. É importante entender como usar essas ferramentas para gerar a documentação HTML a partir do seu código.
O JSDoc tem integração com alguma IDE que facilite a implementação?
A resposta é…sim, o JSDoc é de fácil integração com as IDEs (Integrated Development Environments) e editores de código. Muitos editores de código, como o Visual Studio Code, o Sublime Text e o Atom, têm plugins disponíveis que permitem a geração automática da documentação JSDoc ao escrever o código. Além disso, muitas IDEs, incluindo o Visual Studio Code, têm integração nativa com o JSDoc e oferecem recursos como preenchimento automático de tags e destaque de sintaxe para a documentação JSDoc.
A integração com as IDEs e editores de código torna o processo de escrita da documentação JSDoc muito mais fácil e eficiente, pois você pode ver a documentação ao escrever o código e obter feedback imediato sobre a qualidade da documentação. Isso também ajuda a garantir que a documentação seja mantida de forma consistente e precisa ao longo do tempo, pois a integração com as ferramentas de desenvolvimento permite a correção rápida de erros na documentação.
Acaso não tenha se adaptado ou queira saber outras opções…
- TypeScript JSDoc: é uma extensão do JSDoc que oferece suporte a tipos do TypeScript e é nativamente integrado ao TypeScript.
- JSDoc 3: é uma versão atualizada do JSDoc que oferece uma sintaxe simplificada e novos recursos, como suporte a documentação de tipos.
- YUIDoc: é um gerador de documentação JavaScript que é amplamente utilizado na comunidade Yahoo! e oferece suporte a vários formatos de saída.
- API Extractor: é uma ferramenta para gerar documentação de API a partir de código TypeScript e oferece suporte a tipos do TypeScript.
- Document This: é uma extensão do Visual Studio Code que permite adicionar comentários JSDoc ao seu código de forma rápida e fácil.
Estes são apenas alguns dos principais concorrentes do JSDoc. É importante avaliar as suas necessidades e as características de cada ferramenta antes de escolher o melhor gerador de documentação para o seu projeto.
Abaixo listaremos alguns templates básicos para uso…
Lembrando que cada um destes templates pode ser enriquecido usando algumas outras tags que listamos no artigo também e outros se preferir na documentação do próprio JSDoc.
Função
/** * Nome da função * * Descrição detalhada da função, incluindo sua finalidade e seu comportamento. * * @param {Tipo do parâmetro} nomeDoParâmetro - Descrição do parâmetro * @returns {Tipo de retorno} - Descrição do valor de retorno da função */ function nomeDaFuncao(nomeDoParâmetro) { // código da função return algumValor; }
Este é um exemplo básico que inclui uma descrição geral da função que também pode ser utilizada em combinação com o TypeScript, uma descrição detalhada do parâmetro e uma descrição do valor de retorno da função. Você pode adicionar mais tags, como @throws ou @example, se necessário, para fornecer mais informações sobre a função.
Classe
/** * Nome da classe * * Descrição detalhada da classe, incluindo sua finalidade e seu comportamento. * * @author Nome do autor * @version Versão da classe */ class NomeDaClasse { /** * Construtor da classe * * Descrição detalhada do construtor, incluindo seus parâmetros e o que eles fazem. * * @param {Tipo do parâmetro} nomeDoParâmetro - Descrição do parâmetro */ constructor(nomeDoParâmetro: TipoDoParâmetro) { // código do construtor } /** * Método da classe * * Descrição detalhada do método, incluindo sua finalidade, seus parâmetros e o valor de retorno. * * @param {Tipo do parâmetro} nomeDoParâmetro - Descrição do parâmetro * @returns {Tipo de retorno} - Descrição do valor de retorno do método */ nomeDoMetodo(nomeDoParâmetro: TipoDoParâmetro): TipoDeRetorno { // código do método return algumValor; } }
Este é um exemplo básico que inclui uma descrição geral da classe, um construtor e um método, bem como as descrições detalhadas dos parâmetros e valores de retorno. Além disso, inclui a informação do autor e versão da classe. Novamente, você pode adicionar mais tags, como @throws ou @example, se necessário, para fornecer mais informações sobre a classe e seus métodos.
Type e Interface
/** * Nome do tipo * * Descrição detalhada do tipo, incluindo seu propósito e o que representa. */ type NomeDoTipo = { /** * Propriedade do tipo * * Descrição da propriedade e o que ela representa. */ nomeDaPropriedade: TipoDaPropriedade; }; /** * Nome da interface * * Descrição detalhada da interface, incluindo seu propósito e o que representa. */ interface NomeDaInterface { /** * Propriedade da interface * * Descrição da propriedade e o que ela representa. */ nomeDaPropriedade: TipoDaPropriedade; }
Este é um exemplo básico de documentação de tipos e interfaces no TypeScript. É importante fornecer uma descrição clara e detalhada para ajudar outros desenvolvedores a entender o que o tipo ou interface representa e como usá-lo em seu código. Além disso, você pode adicionar tags adicionais, como @extends ou @implements, se necessário.
Por fim… aleluia né 🙂
Abordamos diversos pontos do quão rico é o JSDoc, porém ainda há muitas outras tags que podem enriquecer ainda mais a sua documentação. Lembrando que esta forma de documentar é apenas um plus, muitos são contra comentários, ou até mesmo, comentários demais, logo use-o com moderação, ok?