如何借助GPT-4评审、重构代码?

电子说

1.3w人已加入

描述

我们将演示使用ChatGPT或GPT-4来检查和重构代码的技术,以及讨论一些限制,并为在编程工作流中使用这些LLM提供方便的资源。

我们将从检查和重构的方法开始,对于每种方法,我们希望尝试不同的提示和所提供的技术,以释放AI驱动的代码改进的全部潜力。

用GPT-4重构代码

重构代码之所以重要,有以下几个原因:它增强了可读性和可维护性,使开发人员更容易理解和修改代码。它还有助于防止潜在的错误,并确保您的代码遵循已建立的最佳实践。最终,重构可以产生更高效、更可靠、更健壮的软件。

GPT-4可以显著促进这一过程。通过使用GPT-4检查和评估代码,您可以快速识别需要改进的地方,并创建更清晰、更高效的代码。利用GPT-4的功能可以节省时间并减少过程中的人为错误,从而更加一致地遵守编码标准。

使旧代码现代化

通过将旧函数提供给GPT-4,并要求它根据现代编码实践进行重构,可以快速实现代码的现代化,如根据现代ES6( ECMAScript 6.0)编程标准重构以下代码。

之前:

Before:

GPT

After:

GPT

在这个重构版本中,GPT4迅速做出了以下改进:

增加了JSDoc注释

将tempConvert函数转换为箭头函数。

对于不可变变量,将var替换为const。

对字符串比较使用严格的相等性检查(===)。

引入一个常数来消除神奇的数字。

使用模板字面量简化return语句。

添加编码最佳实践或原则

我们公司或代码库可能会使用自己希望保留的某些编码实践和风格。对于这种情况,请向GPT4提供希望它关注的特定编码实践或风格的说明。

Prompt:检查以下代码并对其进行重构,使其更加DRY并采用SOLID编程原则。

注意,对于相同的输入,它采用了SOLID编程原则中的单一责任(Single Responsibility)原则,将函数分为3个。与前面的“现代化”步骤不同,它没有将函数转换为箭头(arrow)函数。

“通过将转换逻辑提取到单独的函数中,我们改进了代码对单一责任原则(SOLID的一部分)的遵守,因为现在每个函数都有一个明确的、集中的目的。”

GPT

检测和修复错误

有时我们对代码可能产生的漏洞或潜在问题视而不见。让GPT-4检查和解决代码问题可以节省的不仅仅是时间。

Prompt:检查这段代码的错误并重构以修复任何问题…

故意输入(有缺陷)的程序:

GPT

输出:

GPT

GPT-4所做的更改:

增加了输入参数验证,以确保items是一个数组,折扣百分比是一个数字。

检查折扣百分比的边界条件,以确保它在0-100范围内。

增加了项目属性及其类型的验证,以确保价格和数量为数字。

创建样板代码(*我的最爱)

开始新项目可能会很痛苦。GPT-4不知道业务逻辑,但它可以用于第一天要写的、枯燥的样板代码。从技术上讲,这不是重构,但它很神奇,可以成为编程生命周期中某个过程的一部分。

Prompt:为我写一个样板Node.js函数,它将接受一个User类型的变量,验证用户具有正确的权限,从postgres数据库中获取一个项目类型Posts的数组并返回它们。为业务逻辑留下注释。

代码转换(迁移)

需要将代码从一种语言转换为另一种语言的原因有很多。我们发现一种语言的代码库需要替换为另一种语言的代码,我们需要进行代码的移植;或者老板读了一篇关于最新前端框架的文章,要求我们把老程序移植到 {拆分的新代码库}。 在任何情况下,GPT-4都可以通过简单的提示符提供帮助。

Prompt:在Rust中重写以下代码:…

向代码中添加注释

如果代码是自解释的,但需要注释,这可以节省大量时间。

Prompt:向以下代码添加注释…

更好的重构技巧

像生活中的许多事情一样,使用GPT-4,我们投入越多,得到的回报就越多。在这种情况下,提供更多的背景、说明和指导通常会产生更好的结果。

以下是改进代码重构的技巧和技巧:

拆分提示: 尝试将提示和预期结果拆分为多个步骤。保持提示有一个单一的结果已经被证明比组合提示产生更好的结果。例如,要求评审,然后要求基于评审响应的重构。随着llm增加他们的令牌限制,这可能会变得不那么重要。

举例: 提供预期的输入、数据和输出,以提高准确性和质量。

具体一点: 不要害怕列出你想要的,你知道的,需要的,不应该包括的。

要求它反射: 一种叫做反射的技术已经被证明可以提高GPT4的准确性。基本上就是问它‘你为什么错了?’或者让它反思和检讨自己的反应。

限制

这篇文章中,我们已经见识了很强的AI,但是这些模型并不完美,(目前)还不能准确地复制业务逻辑。下面是使用GPT-4检查或重构代码时需要注意和避免的事情:

它可能是(自信地)错误的: GPT4被训练得听起来令人信服,但这并不意味着它总是正确的。另一篇关于用ChatGPT重构Golang的很棒的文章报道了“它摆脱了类型检查,并自信地解释说,将非int值断言为int类型将返回int类型的零值,但这是不正确的,会引起恐慌”。

从长远来看,节省时间可能并不值得: 当然,GPT4可以在一分钟内生成50行代码,但如果它不适合我们的代码库,则可能需要花费45分钟来调试和调整它,这样还不如自己写。

它可能会过时: 科技世界发展很快。“GPT-4通常缺乏对其绝大部分数据被切断后(2021年9月)发生的事件的了解。” 您可能会遇到任何新更新的库、框架或技术的问题。

结论

人工智能驱动的编程只是一种新事物,但它会一直存在下去。如果使用得当,它可以节省时间,并帮助我们编写更好的代码。我希望您喜欢本文,并掌握了一些提高编程效率或错误处理的新技能。

审核编辑 :李倩

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分