电子说
我们将演示使用ChatGPT或GPT-4来检查和重构代码的技术,以及讨论一些限制,并为在编程工作流中使用这些LLM提供方便的资源。
我们将从检查和重构的方法开始,对于每种方法,我们希望尝试不同的提示和所提供的技术,以释放AI驱动的代码改进的全部潜力。
用GPT-4重构代码
重构代码之所以重要,有以下几个原因:它增强了可读性和可维护性,使开发人员更容易理解和修改代码。它还有助于防止潜在的错误,并确保您的代码遵循已建立的最佳实践。最终,重构可以产生更高效、更可靠、更健壮的软件。
GPT-4可以显著促进这一过程。通过使用GPT-4检查和评估代码,您可以快速识别需要改进的地方,并创建更清晰、更高效的代码。利用GPT-4的功能可以节省时间并减少过程中的人为错误,从而更加一致地遵守编码标准。
使旧代码现代化
通过将旧函数提供给GPT-4,并要求它根据现代编码实践进行重构,可以快速实现代码的现代化,如根据现代ES6( ECMAScript 6.0)编程标准重构以下代码。
之前:
Before:
After:
在这个重构版本中,GPT4迅速做出了以下改进:
增加了JSDoc注释
将tempConvert函数转换为箭头函数。
对于不可变变量,将var替换为const。
对字符串比较使用严格的相等性检查(===)。
引入一个常数来消除神奇的数字。
使用模板字面量简化return语句。
添加编码最佳实践或原则
我们公司或代码库可能会使用自己希望保留的某些编码实践和风格。对于这种情况,请向GPT4提供希望它关注的特定编码实践或风格的说明。
Prompt:检查以下代码并对其进行重构,使其更加DRY并采用SOLID编程原则。
注意,对于相同的输入,它采用了SOLID编程原则中的单一责任(Single Responsibility)原则,将函数分为3个。与前面的“现代化”步骤不同,它没有将函数转换为箭头(arrow)函数。
“通过将转换逻辑提取到单独的函数中,我们改进了代码对单一责任原则(SOLID的一部分)的遵守,因为现在每个函数都有一个明确的、集中的目的。”
检测和修复错误
有时我们对代码可能产生的漏洞或潜在问题视而不见。让GPT-4检查和解决代码问题可以节省的不仅仅是时间。
Prompt:检查这段代码的错误并重构以修复任何问题…
故意输入(有缺陷)的程序:
输出:
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月)发生的事件的了解。” 您可能会遇到任何新更新的库、框架或技术的问题。
结论
人工智能驱动的编程只是一种新事物,但它会一直存在下去。如果使用得当,它可以节省时间,并帮助我们编写更好的代码。我希望您喜欢本文,并掌握了一些提高编程效率或错误处理的新技能。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !