[ChatGPT] Escrevendo Mensagens de Commit e Comentando Código
Como o ChatGPT pode ajudá-lo a escrever mensagens de commit e comentários de código de maneira mais eficiente e eficaz
Introdução
Inserindo Contexto
Exemplo Prático
Observações
Limitações do ChatGPT
Dicas para Escrever Commits
Dicas para Comentários
Considerações Finais
Introdução
Escrever mensagens de commit e comentários de código pode ser uma tarefa desafiadora para muitos desenvolvedores.
Pessoalmente; eu sou programador há mais de 30 anos e ainda acho chato, tedioso e às vezes não tenho criatividade para escrever mensagens de commit e comentar código.
Pois é; o ChatGPT está me quebrando um galho!
É importante fornecer informações precisas e úteis, mas às vezes é difícil encontrar as palavras certas ou pensar em como explicar o que você fez.
O código que você próprio escreve não lhe parece tão óbvio e autoexplicativo no presente momento em que você está escrevendo?
Nesse artigo, vou mostrar como o ChatGPT pode ajudá-lo a escrever mensagens de commit e comentários de código de maneira mais eficiente e eficaz.
Usando exemplos de código em linguagem C, mostrarei como inserir contexto na conversa com o ChatGPT e como solicitar a ele para escrever mensagens de commit e comentários de código.
Vou também discutir os limites do ChatGPT e fornecer dicas adicionais para escrever mensagens de commit e comentários de código de maneira eficiente.
Inserindo Contexto
É importante inserir contexto na conversa com o ChatGPT antes de pedir para ele escrever mensagens de commit ou comentários de código porque isso permite que o modelo tenha uma compreensão mais profunda do que você está tentando fazer.
Na grande maioria das vezes; basta inserir o Código fonte no prompt do ChatGPT, conforme o exemplo prático; porém o ChatGPT tem algumas limitações que eu explico mais adiante, para os raros casos em que os comentários do ChatGPT não forem satisfatórios, seguem algumas orientações.
Quanto mais contexto você fornecer, mais informações o ChatGPT terá para gerar uma resposta apropriada.
Você pode fornecer informações sobre o código que você acabou de escrever ou o problema que você está tentando resolver; então o ChatGPT pode gerar uma mensagem de commit que descreva claramente o que você fez e por quê.
Da mesma forma você pode fornecer informações sobre o código em questão ou a tarefa que o código realiza; isso permitirá ao ChatGPT gerar comentários de código que expliquem de maneira precisa o que o código está fazendo e como ele se relaciona com outras partes do projeto.
Exemplo Prático
Fornecer o código no campo de entrada do ChatGPT é uma maneira prática de inserir contexto na conversa.
Abaixo mostro um exemplo utilizando a linguagem C:
Eu: // main.c
#include <stdio.h>
#include "funcoes_matematicas.h"
int main() {
int n;
printf("Insira um número: ");
scanf("%d", &n);
printf("O fatorial de %d é %d\n", n, fatorial(n));
return 0;
}
ChatGPT: Este é o código...
Este é o código de um programa em C que calcula o fatorial de um número dado pelo usuário. O programa começa incluindo as bibliotecas "stdio.h" e "funcoes_matematicas.h", que fornecem funções para entrada e saída de dados e funções matemáticas, respectivamente.
Em seguida, é declarada uma função chamada "main", que é a função principal do programa. Dentro da função "main", uma variável inteira chamada "n" é declarada e um prompt é exibido para o usuário para que ele insira um número. O número inserido pelo usuário é armazenado na variável "n" usando a função "scanf".
Em seguida, a função "fatorial" é chamada com o argumento "n" e o resultado é armazenado em uma variável. Finalmente, o resultado é exibido para o usuário usando a função "printf".
Observe que a função "fatorial" é declarada em um arquivo separado chamado "funcoes_matematicas.h". É importante incluir este arquivo no início do programa para poder usar a função "fatorial".
Eu: // funcoes_matematicas.h
#ifndef FUNCOES_MATEMATICAS_H
#define FUNCOES_MATEMATICAS_H
int fatorial(int n);
#endif
ChatGPT: Este é o código...
Este é o código de um arquivo de cabeçalho em C chamado "funcoes_matematicas.h". Ele contém a declaração de uma função chamada "fatorial" que calcula o fatorial de um número dado.
O código começa com uma verificação de macros "ifndef" e "define". Essas macros são usadas para garantir que o arquivo de cabeçalho não seja incluído mais de uma vez em um programa. Isso é útil quando você tem um arquivo de cabeçalho que é incluído por vários outros arquivos.
Em seguida, é declarada a função "fatorial" que recebe um inteiro como argumento e retorna um inteiro.
Finalmente, é usada outra macro "endif" para fechar a verificação de macros "ifndef" e "define". Isso indica o fim da declaração da função "fatorial".
Eu: Escreva comentários no código
ChatGPT:
// funcoes_matematicas.h
#ifndef FUNCOES_MATEMATICAS_H
#define FUNCOES_MATEMATICAS_H
// Função para calcular o fatorial de um número
int fatorial(int n);
#endif // FUNCOES_MATEMATICAS_H
Eu: // funcoes_matematicas.c
#ifndef FUNCOES_MATEMATICAS_C
#define FUNCOES_MATEMATICAS_C
#include <stdio.h>
#include "funcoes_matematicas.h"
int fatorial(int n) {
if (n == 0) {
return 1;
}
return n * fatorial(n - 1);
}
#endif
ChatGPT: Este é o código...
Este é o código de um arquivo de implementação em C chamado "funcoes_matematicas.c". Ele contém a implementação da função "fatorial" que foi declarada no arquivo de cabeçalho "funcoes_matematicas.h".
O código começa com uma verificação de macros "ifndef" e "define". Essas macros são usadas para garantir que o arquivo de implementação não seja incluído mais de uma vez em um programa. Isso é útil quando você tem um arquivo de implementação que é incluído por vários outros arquivos.
Em seguida, o arquivo de cabeçalho "funcoes_matematicas.h" é incluído, o que permite que a função "fatorial" seja usada no arquivo de implementação.
A função "fatorial" é então implementada usando a recursão. Se o número passado como argumento for zero, a função retorna 1, que é o fatorial de zero. Caso contrário, a função retorna o número passado como argumento multiplicado pelo fatorial de um número menor.
Finalmente, é usada outra macro "endif" para fechar a verificação de macros "ifndef" e "define". Isso indica o fim da implementação da função "fatorial".
Eu: Escreva comentários no código
ChatGPT:
// funcoes_matematicas.c
#ifndef FUNCOES_MATEMATICAS_C
#define FUNCOES_MATEMATICAS_C
#include <stdio.h>
#include "funcoes_matematicas.h"
// Função para calcular o fatorial de um número
int fatorial(int n) {
if (n == 0) {
return 1; // fatorial de zero é sempre um
}
return n * fatorial(n - 1);
}
#endif // FUNCOES_MATEMATICAS_C
Eu: // funcoes_matematicas.c
#ifndef FUNCOES_MATEMATICAS_C
#define FUNCOES_MATEMATICAS_C
#include <stdio.h>
#include "funcoes_matematicas.h"
int fatorial(int n) {
int resultado = 1;
for (int i = 2; i <= n; i++) {
resultado *= i;
}
return resultado;
}
#endif
ChatGPT: Este é o código...
Este é o código de uma versão alternativa da função "fatorial" que foi implementada usando um loop "for" em vez de recursão.
O código começa declarando uma variável inteira chamada "resultado" e inicializando-a com 1. Em seguida, o loop "for" começa em 2 e vai até o número passado como argumento, incrementando a variável de controle "i" em 1 a cada iteração. Dentro do loop, a variável "resultado" é atualizada multiplicando-se por "i".
Quando o loop termina, a função retorna o valor da variável "resultado", que é o fatorial do número passado como argumento.
Observe que essa implementação da função "fatorial" não é recursiva, o que significa que ela não chama a si mesma para calcular o fatorial de um número menor. Em vez disso, ela usa um loop "for" para calcular o fatorial de forma iterativa. Isso pode ser mais eficiente do que a implementação recursiva, mas a escolha da implementação depende do contexto e das necessidades do programa.
Eu: escreva uma menságem de commit para essa atualização
ChatGPT: Aqui está uma possível mensagem de commit para essa atualização:
"Implementação da função fatorial usando um loop for em vez de recursão. Esta implementação pode ser mais eficiente em alguns casos e é uma alternativa à implementação recursiva existente."
Eu: em qual caso essa implementação é melhor?
ChatGPT: Essa implementação...
Essa implementação da função "fatorial" que usa um loop "for" em vez de recursão pode ser mais eficiente em casos em que o número passado como argumento é muito grande. Isso ocorre porque a implementação recursiva precisa criar uma nova chamada da função a cada iteração, o que pode consumir muito espaço na pilha de chamadas de função. Quando o número passado como argumento é muito grande, a pilha de chamadas de função pode ficar muito grande e, em alguns casos, pode resultar em um erro de estouro de pilha.
Por outro lado, a implementação iterativa usando um loop "for" não cria novas chamadas da função e, portanto, não enfrenta o risco de estouro de pilha. No entanto, ela pode ser menos eficiente em casos em que o número passado como argumento é pequeno, pois precisa realizar mais iterações do loop "for".
Portanto, a escolha da implementação depende do contexto e das necessidades do programa. É importante avaliar qual das duas implementações é mais adequada para cada caso específico.
Eu: escreva uma menságem de commit para a atualização explicando isso de forma resumida
ChatGPT: "Função fatorial com loop for. Mais eficiente quando "n" é muito grande."
Eu: // funcoes_matematicas.c
#ifndef FUNCOES_MATEMATICAS_C
#define FUNCOES_MATEMATICAS_C
#include <stdio.h>
#include <stdlib.h>
#include "funcoes_matematicas.h"
int fatorial(int n) {
if (n < 0) {
fprintf(stderr, "Erro: número negativo fornecido para cálculo do fatorial.\n");
exit(1);
}
int resultado = 1;
for (int i = 2; i <= n; i++) {
resultado *= i;
}
return resultado;
}
#endif
ChatGPT: Este é o código...
Este é o código de uma versão atualizada da função "fatorial" que inclui uma verificação para garantir que o número passado como argumento seja válido para o cálculo do fatorial.
A função verifica se o número passado como argumento é negativo. Se for, uma mensagem de erro é exibida usando a função "fprintf" e o programa é finalizado com o código de erro 1 usando a função "exit". Isso pode ser útil para garantir que o programa não tente calcular o fatorial de um número inválido e pare de executar de forma limpa em caso de erro.
Se o número passado como argumento for válido, a função continua normalmente, calculando o fatorial usando um loop "for" e retornando o resultado.
Eu: escreva uma menságem de commit para essa atualização
ChatGPT: Aqui está uma possível mensagem de commit para essa atualização:
"Adição de verificação de entrada para garantir que o número passado como argumento para a função fatorial seja válido. Em caso de número inválido, o programa exibe uma mensagem de erro e finaliza com código de erro 1."
Eu: Escreva comentários no código
ChatGPT:
// funcoes_matematicas.c
#ifndef FUNCOES_MATEMATICAS_C
#define FUNCOES_MATEMATICAS_C
#include <stdio.h>
#include <stdlib.h>
#include "funcoes_matematicas.h"
// Função para calcular o fatorial de um número
int fatorial(int n) {
// Verifica se o número fornecido é válido para o cálculo do fatorial.
if (n < 0) {
fprintf(stderr, "Erro: número negativo fornecido para cálculo do fatorial.\n");
exit(1); // finaliza o programa com código de erro 1
}
int resultado = 1;
// Loop que vai de 2 até o "n" fornecido.
// Cada iteração multiplica "resultado" pela variável de controle "i".
for (int i = 2; i <= n; i++) {
resultado *= i;
}
return resultado;
}
#endif // FUNCOES_MATEMATICAS_C
Observações
- No início do código insira um comentário com o nome do arquivo; durante a conversa com o ChatGPT você pode se referir ao arquivo dizendo por exemplo:
O que faz a linha 3 no arquivo "main.c"?
- O limite máximo do prompt é 4.096 caracteres.
Você pode dividir um arquivo grande em partes.
Clique aqui para ver um exemplo.
Eu: // arquivo ".gitpod.yml" dividido em 2 partes
// Parte 1/2
tasks:
- name: Run Dev Server
init: nvm install && npm install
Eu: // arquivo ".gitpod.yml" dividido em 2 partes
// Parte 2/2
ports:
- port: 3000
onOpen: notify
visibility: private
- port: 1080
onOpen: ignore
visibility: private
- port: 1025
onOpen: ignore
visibility: private
Eu: junte as partes e mostre-me o ".gitpod.yml"
ChatGPT: Sure, here is...
tasks:
- name: Run Dev Server
init: nvm install && npm install
ports:
- port: 3000
onOpen: notify
visibility: private
- port: 1080
onOpen: ignore
visibility: private
- port: 1025
onOpen: ignore
visibility: private
It shows you how the task is defined to run the command...
- Se você disser ao ChatGPT:
Comente o código
Então ele vai te dar um longo texto explicando tudo o que o código faz.
Se ao invés disso você disser:
Escreva comentários no código
Então ele vai inserir os comentários no código.
Limitações do ChatGPT
Um dos principais limites do ChatGPT é que ele não é capaz de compreender o código de maneira tão detalhada quanto um programador profissional.
Isso significa que pode cometer erros ao escrever mensagens de commit ou comentários de código se não for fornecido o suficiente contexto ou informações precisas.
Lembre-se que o ChatGPT reflete o texto em que foi treinado, erros podem ocorrer em situações que extrapolem sua base de conhecimentos.
Apesar desses limites, o ChatGPT é uma ferramenta útil para ajudá-lo a escrever mensagens de commit e comentários de código de maneira mais eficiente e eficaz.
Dicas para Escrever Commits
Aqui vão algumas dicas adicionais para ajudá-lo a escrever mensagens de commit de maneira eficiente:
- Comece com um resumo conciso: As mensagens de commit devem começar com um resumo conciso do que foi feito. Isso ajuda a fornecer uma visão geral rápida da alteração e permite que os outros desenvolvedores entendam rapidamente o que foi feito.
- Mantenha as mensagens de commit curtas: As mensagens de commit devem ser curtas e diretas, explicando o que foi feito de maneira clara e precisa. Evite incluir informações desnecessárias ou usar jargões técnicos sem explicação.
- Use o presente simples: As mensagens de commit devem ser escritas no presente simples, explicando o que está sendo feito no momento em que a alteração é feita. Isso ajuda a manter a clareza e a precisão.
- Seja específico: Seja específico ao descrever o que você está fazendo e por quê. Isso ajuda os outros desenvolvedores a entender o que você está fazendo e por que.
- Forneça contexto: Forneça contexto sobre o problema que você está tentando resolver ou a tarefa que você está realizando. Isso ajuda os outros desenvolvedores a entender o que você está fazendo e por que.
- Use palavras-chave: Algumas palavras-chave, como "fix", "update" ou "improve", podem ajudar a fornecer contexto sobre o que foi feito. No entanto, é importante não abusar dessas palavras e ser específico sobre o que foi feito.
Dicas para Comentários
Eis mais algumas dicas para ajudá-lo a com os comentários de código:
- Comente o código de maneira útil: Os comentários de código devem explicar o que o código está fazendo de maneira clara e precisa. Evite comentários óbvios ou inúteis, como "Incrementa o contador".
- Seja específico: Seja específico ao descrever o que o código está fazendo e por quê. Isso ajuda os outros desenvolvedores a entender o que você está fazendo e por que.
- Forneça contexto: Forneça contexto sobre o problema que você está tentando resolver ou a tarefa que você está realizando. Isso ajuda os outros desenvolvedores a entender o que você está fazendo e por que.
- Use o padrão de comentário adequado: Cada linguagem de programação tem seu próprio padrão de comentário. Certifique-se de seguir o padrão adequado para a linguagem de programação que você está usando para garantir que os comentários sejam legíveis e fáceis de seguir.
- Não comente cada linha de código: Evite comentar cada linha de código. Em vez disso, tente fornecer comentários mais amplos que expliquem o que o código está fazendo de maneira mais geral.
- Mantenha os comentários atualizados: Certifique-se de atualizar os comentários sempre que alterar o código para que eles continuem sendo precisos e úteis.
Considerações Finais
O ChatGPT pode ajudá-lo a economizar tempo na escrita de mensagens de commit e comentários de código, permitindo que você se concentre nas tarefas importantes e que como programador você deve gostar mais; que é escrever código.
É importante alertar que o ChatGPT não é uma substituição para o pensamento crítico e a revisão de um programador profissional.