我們將演示使用ChatGPT或GPT-4來檢查和重構(gòu)代碼的技術(shù),以及討論一些限制,并為在編程工作流中使用這些LLM提供方便的資源。
我們將從檢查和重構(gòu)的方法開始,對于每種方法,我們希望嘗試不同的提示和所提供的技術(shù),以釋放AI驅(qū)動的代碼改進的全部潛力。
用GPT-4重構(gòu)代碼
重構(gòu)代碼之所以重要,有以下幾個原因:它增強了可讀性和可維護性,使開發(fā)人員更容易理解和修改代碼。它還有助于防止?jié)撛诘腻e誤,并確保您的代碼遵循已建立的最佳實踐。最終,重構(gòu)可以產(chǎn)生更高效、更可靠、更健壯的軟件。
GPT-4可以顯著促進這一過程。通過使用GPT-4檢查和評估代碼,您可以快速識別需要改進的地方,并創(chuàng)建更清晰、更高效的代碼。利用GPT-4的功能可以節(jié)省時間并減少過程中的人為錯誤,從而更加一致地遵守編碼標(biāo)準(zhǔn)。
使舊代碼現(xiàn)代化
通過將舊函數(shù)提供給GPT-4,并要求它根據(jù)現(xiàn)代編碼實踐進行重構(gòu),可以快速實現(xiàn)代碼的現(xiàn)代化,如根據(jù)現(xiàn)代ES6( ECMAScript 6.0)編程標(biāo)準(zhǔn)重構(gòu)以下代碼。
之前:
Before:
After:
在這個重構(gòu)版本中,GPT4迅速做出了以下改進:
增加了JSDoc注釋
將tempConvert函數(shù)轉(zhuǎn)換為箭頭函數(shù)。
對于不可變變量,將var替換為const。
對字符串比較使用嚴(yán)格的相等性檢查(===)。
引入一個常數(shù)來消除神奇的數(shù)字。
使用模板字面量簡化return語句。
添加編碼最佳實踐或原則
我們公司或代碼庫可能會使用自己希望保留的某些編碼實踐和風(fēng)格。對于這種情況,請向GPT4提供希望它關(guān)注的特定編碼實踐或風(fēng)格的說明。
Prompt:檢查以下代碼并對其進行重構(gòu),使其更加DRY并采用SOLID編程原則。
注意,對于相同的輸入,它采用了SOLID編程原則中的單一責(zé)任(Single Responsibility)原則,將函數(shù)分為3個。與前面的“現(xiàn)代化”步驟不同,它沒有將函數(shù)轉(zhuǎn)換為箭頭(arrow)函數(shù)。
“通過將轉(zhuǎn)換邏輯提取到單獨的函數(shù)中,我們改進了代碼對單一責(zé)任原則(SOLID的一部分)的遵守,因為現(xiàn)在每個函數(shù)都有一個明確的、集中的目的?!?/p>
檢測和修復(fù)錯誤
有時我們對代碼可能產(chǎn)生的漏洞或潛在問題視而不見。讓GPT-4檢查和解決代碼問題可以節(jié)省的不僅僅是時間。
Prompt:檢查這段代碼的錯誤并重構(gòu)以修復(fù)任何問題…
故意輸入(有缺陷)的程序:
輸出:
GPT-4所做的更改:
增加了輸入參數(shù)驗證,以確保items是一個數(shù)組,折扣百分比是一個數(shù)字。
檢查折扣百分比的邊界條件,以確保它在0-100范圍內(nèi)。
增加了項目屬性及其類型的驗證,以確保價格和數(shù)量為數(shù)字。
創(chuàng)建樣板代碼(*我的最愛)
開始新項目可能會很痛苦。GPT-4不知道業(yè)務(wù)邏輯,但它可以用于第一天要寫的、枯燥的樣板代碼。從技術(shù)上講,這不是重構(gòu),但它很神奇,可以成為編程生命周期中某個過程的一部分。
Prompt:為我寫一個樣板Node.js函數(shù),它將接受一個User類型的變量,驗證用戶具有正確的權(quán)限,從postgres數(shù)據(jù)庫中獲取一個項目類型Posts的數(shù)組并返回它們。為業(yè)務(wù)邏輯留下注釋。
代碼轉(zhuǎn)換(遷移)
需要將代碼從一種語言轉(zhuǎn)換為另一種語言的原因有很多。我們發(fā)現(xiàn)一種語言的代碼庫需要替換為另一種語言的代碼,我們需要進行代碼的移植;或者老板讀了一篇關(guān)于最新前端框架的文章,要求我們把老程序移植到 {拆分的新代碼庫}。 在任何情況下,GPT-4都可以通過簡單的提示符提供幫助。
Prompt:在Rust中重寫以下代碼:…
向代碼中添加注釋
如果代碼是自解釋的,但需要注釋,這可以節(jié)省大量時間。
Prompt:向以下代碼添加注釋…
更好的重構(gòu)技巧
像生活中的許多事情一樣,使用GPT-4,我們投入越多,得到的回報就越多。在這種情況下,提供更多的背景、說明和指導(dǎo)通常會產(chǎn)生更好的結(jié)果。
以下是改進代碼重構(gòu)的技巧和技巧:
拆分提示: 嘗試將提示和預(yù)期結(jié)果拆分為多個步驟。保持提示有一個單一的結(jié)果已經(jīng)被證明比組合提示產(chǎn)生更好的結(jié)果。例如,要求評審,然后要求基于評審響應(yīng)的重構(gòu)。隨著llm增加他們的令牌限制,這可能會變得不那么重要。
舉例: 提供預(yù)期的輸入、數(shù)據(jù)和輸出,以提高準(zhǔn)確性和質(zhì)量。
具體一點: 不要害怕列出你想要的,你知道的,需要的,不應(yīng)該包括的。
要求它反射: 一種叫做反射的技術(shù)已經(jīng)被證明可以提高GPT4的準(zhǔn)確性?;旧暇褪菃査銥槭裁村e了?’或者讓它反思和檢討自己的反應(yīng)。
限制
這篇文章中,我們已經(jīng)見識了很強的AI,但是這些模型并不完美,(目前)還不能準(zhǔn)確地復(fù)制業(yè)務(wù)邏輯。下面是使用GPT-4檢查或重構(gòu)代碼時需要注意和避免的事情:
它可能是(自信地)錯誤的: GPT4被訓(xùn)練得聽起來令人信服,但這并不意味著它總是正確的。另一篇關(guān)于用ChatGPT重構(gòu)Golang的很棒的文章報道了“它擺脫了類型檢查,并自信地解釋說,將非int值斷言為int類型將返回int類型的零值,但這是不正確的,會引起恐慌”。
從長遠(yuǎn)來看,節(jié)省時間可能并不值得: 當(dāng)然,GPT4可以在一分鐘內(nèi)生成50行代碼,但如果它不適合我們的代碼庫,則可能需要花費45分鐘來調(diào)試和調(diào)整它,這樣還不如自己寫。
它可能會過時: 科技世界發(fā)展很快。“GPT-4通常缺乏對其絕大部分?jǐn)?shù)據(jù)被切斷后(2021年9月)發(fā)生的事件的了解。” 您可能會遇到任何新更新的庫、框架或技術(shù)的問題。
結(jié)論
人工智能驅(qū)動的編程只是一種新事物,但它會一直存在下去。如果使用得當(dāng),它可以節(jié)省時間,并幫助我們編寫更好的代碼。我希望您喜歡本文,并掌握了一些提高編程效率或錯誤處理的新技能。
審核編輯 :李倩
-
人工智能
+關(guān)注
關(guān)注
1791文章
47279瀏覽量
238511 -
GPT
+關(guān)注
關(guān)注
0文章
354瀏覽量
15379
原文標(biāo)題:如何借助GPT-4評審、重構(gòu)代碼?
文章出處:【微信號:軟件質(zhì)量報道,微信公眾號:軟件質(zhì)量報道】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論