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 替你寫個 demo

# 告訴 ChatGPT 用什麼語言,語言版本號,加上給我完成的代碼
關鍵詞:請用 python3.7 編寫一個貪吃蛇遊戲,給我完整的代碼

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

  • 如果給的代碼沒寫完,ChatGPT 存在字數限制
    • 可以給出:請繼續提供後面的代碼
  • 如果給出的代碼有問題,運行報錯
    • 可以給出:描述問題,請完善代碼
    • 如果代碼過長每次生成代碼會浪費時間或者浪費字數 token,也可以這樣描述:描述問題,請指出需要修改哪一行代碼

有時候 ChatGPT 給出的代碼一直都有問題,這個時候就需要我們人為地去理解代碼(也可以讓 ChatGPT 給你解釋代碼的意思),發現代碼中的問題,清楚地給 ChatGPT 指出問題所在,這個能提升解決問題的速度。


提升代碼質量#

讓 ChatGPT 幫你解決 BUG

當你寫完一個需求,有好幾段核心邏輯,這個時候可以讓 ChatGPT 幫你檢查一下代碼有沒有 BUG,又或者線上出現問題了,你知道具體是某一段代碼出現了問題,但是你不清楚問題所在,可以嘗試去問一下 ChatGPT,讓它幫你去檢查,給你解決問題提供思路

關鍵詞: `修復 BUG:{代碼片段}`

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 並不是萬能的,不要指望你一點都不懂的情況下能靠著它橫掃一切,它就像

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。