banner
lMingyul

lMingyul

记录穿过自己的万物
jike

用好系列-ChatGPT之编程篇

image

この画像はChatGPTによって生成されました

最近、会社では ChatGPT の試用をプログラマーの間で推進しています。試用した人の中には、このものが自分のコーディングの考え方に影響を与え、効率を低下させると感じる人もいます。一方で、試用した人の中には、これに夢中になって離れられず、パソコンの画面が常に ChatGPT によって生成されたテキストの画面になっている人もいます。私もプログラミングの面での ChatGPT の使用シーンを記録してみました。

コード#

コードの理解#

日常的に要件を書くとき、最初から書くわけではありません。多くの場合、他の人が以前に書いたコードを基に修正を行います。各人のコードのスタイルと複雑さは異なります。このような場合、まずコードのロジックを基本的に整理するために ChatGPT を使用します。

キーワード:コードの説明、例を挙げる:{コードの断片}

@Aspect
@Slf4j
@Component
public class LogAspect {

    public final static String TRACE_LOG_ID = "traceId";

    /**
     * 切面表达式  此次切面为service的实现类
     */
    @Pointcut("execution(* org.lmingyu.projects.cs.*.service.*.impl.*.*(..))")
    public void logPointcut() {

    }

    /**
     * 打印日志
     *
     * @param pjp 入参 traceId从第一个参数获取
     * @return 结果
     * @throws Throwable 异常
     */
    @Around("logPointcut()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        String traceId = MDC.get(TRACE_LOG_ID);
        if (StringUtils.isBlank(traceId)) {
            if (pjp.getArgs().length > 0 && pjp.getArgs()[0] instanceof BaseReq) {
                BaseReq req = (BaseReq) pjp.getArgs()[0];
                if (StringUtils.isNotBlank(req.getTraceId())) {
                    traceId = req.getTraceId();
                }
            }
            if (StringUtils.isNotBlank(traceId)) {
                MDC.put(TRACE_LOG_ID, traceId);
            } else {
                MDC.put(TRACE_LOG_ID, UUID.randomUUID().toString());
            }
        }

        long startTime = System.currentTimeMillis();
        // 打印请求参数
        log.info("入参:{}", JSON.toJSONString(pjp.getArgs()));

        Object result = pjp.proceed();
        // 打印出参
        log.info("耗时{}ms,出参:{}", System.currentTimeMillis() - startTime, JSON.toJSONString(result));
        return result;
    }

}

ChatGPT の回答:

CleanShot-2023-05-21-10-14-31@2x


コードの作成#

たまに自分が学んだことのない言語でコードを書くのは非常に困難です。この場合、ChatGPT に書いてもらうことができます。または、大まかな実装のアイデアがあるが、どこから始めればいいかわからない場合も、ChatGPT にデモを書いてもらうことができます。

# ChatGPTに、python3.7を使用して完全なスネークゲームのコードを書いてくださいと伝える
キーワード:python3.7を使用して完全なスネークゲームのコードを書いてください

CleanShot-2023-05-21-11-01-00@2x

  • 提供されたコードが完全に書かれていない場合、ChatGPT に「後続のコードを提供してください」と伝えることができます。
  • 提供されたコードに問題があり、実行時エラーが発生する場合、ChatGPT に「問題を説明して、コードを修正してください」と伝えることができます。コードが長すぎて、コードを生成するたびに時間またはトークンを無駄にする場合は、「問題を説明して、修正する必要がある行を指摘してください」というように説明することもできます。

ChatGPT が提供するコードには常に問題があり、解決策を提供するためには、コードを理解する必要があります(または ChatGPT にコードの意味を説明してもらうこともできます)。コードの問題を見つけ、明確に問題を指摘し、ChatGPT に問題の解決策を提供することで、問題解決のスピードを向上させることができます。


コードの品質向上#

ChatGPT にバグを修正してもらう

要件を書き終えた後、いくつかのコアロジックがある場合、ChatGPT にコードにバグがないか確認してもらうことができます。または、オンラインで問題が発生し、特定のコードの問題がわかっているが、具体的な問題の場所がわからない場合、ChatGPT に問題をチェックしてもらい、問題の解決策を提供してもらうことができます。

キーワード:バグを修正する:{コードの断片}

CleanShot-2023-05-21-11-44-50@2x

  • 問題が発生した行が表示される場合、問題が発生したコードの行を ChatGPT に伝えることもできます。これにより、問題の特定がより正確に行われます。
  • コードに非常に詳細な説明を追加することもできます。

ChatGPT にコードを最適化してもらう

ChatGPT にコードを最適化してもらうこともできます。

キーワード:コードを最適化する:{コードの断片}

CleanShot-2023-05-21-13-45-04@2x

SQL も最適化してもらうことができます。

キーワード:SQLの最適化:{SQLの断片}

CleanShot-2023-05-21-14-04-29@2x

-- 最適化前のSQL
SELECT COUNT(*) AS 'order_count',
SUM(amount) AS 'total_sales',
SUM(amount) / COUNT(*) AS'avg_sales_per_order'
FROM sales
WHERE user_id = 123
AND created_at BETWEENDATE_SUB(NOW(),INTERVAL 7 DAY) AND NOW();

--- 最適化後のSQL
SET @start_date = DATE_SUB(NOW(), INTERVAL 7 DAY);

SELECT 
  COUNT(*) AS 'order_count',
  SUM(amount) AS 'total_sales',
  SUM(amount) / COUNT(*) AS 'avg_sales_per_order'
FROM sales
WHERE 
  user_id = 123 AND 
  created_at BETWEEN @start_date AND NOW();


テストシナリオ#

テストデータの生成#

開発が終わった後、機能をテストするために自分でテストデータを生成する必要があります。この場合、ChatGPT にテストデータを生成してもらうことができます。これらのデータは、ChatGPT に対応するデータの Python コードを生成してもらうこともできます。

CleanShot-2023-05-21-14-37-40@2x

ユニットテストケースの生成#

コードを書いた後、対応するユニットテストケースを作成して、コードの安定性と正確性を確保する必要がありますが、ユニットテストケースの作成には時間がかかることがよくあります。時には元のロジックよりも複雑な場合もあります。この場合、ChatGPT にコードのユニットテストケースを作成してもらうことができます。

キーワード:対応するユニットテストケースを生成する {コードの断片}

問題解決のアシスタント#

要件を受け取るとき、通常はアイデアがなく、または複数の実装方法がある場合があります。この場合、ChatGPT に質問して、問題の解決策を提供してもらうことができます。

プログラミングの学習のサポート#

新しい技術を学ぶとき、どこから始めればいいかわからないことがよくあります。この場合、ChatGPT に学習の概要を提供してもらったり、学習計画を立ててもらったり、問題に直面したらそれを ChatGPT に投げてみたりすることができます。

使用上のヒント#

  • 会話が長くなる場合は、セグメントごとに分割して対話し、各セグメントの終わりに「理解したら、理解したと答えてください」と付け加えます。
  • ChatGPT の回答がほぼ完全で、修正が必要なのは一部の場合は、それは自分でやるべきです。ChatGPT に完全に一致する答えを求めることは得策ではありません。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。