代码没注释?一个方法几百行?

干程序员的都有接手别人的代码的经历,大部分时候,我们都会偷偷骂一句"这人是 S B 吧,这代码写的这么烂!"

"一个方法写几百行,还没有注释,鬼知道写的什么东西!"

现在,你不需要为这个事情担心了。AI 可以帮你生成注释,代码拆分。

AI 帮你生成注释

接手别人的代码,很多人写代码都没有注释,变量命名也是一言难尽,这个时候,你直接把代码输入给 GPT,它能很好的帮助你理解代码的意思,减少接手别人代码的痛苦。

prompt:

大模型返回:

这段Java代码的意思是:

首先,定义了两个 Mono 对象:mono 1和 mono2,它们调用两个 TestServiceImpl 类的 request() 方法并返回一个 String 类型的结果对象。

然后,使用 Mono.zip() 方法将 mono1 和 mono2 对象组合起来,当它们都完成后,将结果以 Tuple(元组)类型传递给 map() 方法。在 map() 方法中,根据子 Mono 的执行情况,将其结果对象合并成一个 String 对象。如果第二个 Mono 对象返回了结果,则将两个结果字符串合并;否则,只返回第一个 Mono 对象的结果字符串。

最后,使用 Mono 对象的 block() 方法来阻塞等待结果,并将结果打印到控制台执行。如果没有结果可以使用,则返回 mono1 对象作为默认值。该代码实现的功能是等待两个 Mono 对象都完成后,将它们的结果对象合并为一个字符串。

AI 帮你学习你完全不熟悉的语言

GPT 能支持各种语言,当你工作中碰到了不熟悉的语言,但是老板又让你接手这种项目的时候,GPT 就派上用上了,它能很好的帮我们快速学习代码,了解业务。

比如下面这个例子,lua 是一种现在用的不多的语言了,但是 GPT 照样能很好的解释代码的意思。

prompt:

content = content:gsub('USERNAME=([^%c]+)\n+', '') --- 上面是一行 lua 代码,请你解释意思

作为一个完全没学过 Lua 语言的阿七来说,我一眼觉得这行代码的意思是获取 content 中的 USERNAME 字段的值。

还有,阿七不是那么自信,把问题抛给了 GPT。

大模型返回:

这行 Lua 代码的意思是:

使用 Lua 中的 gsub 函数,将字符串变量 content 中满足特定模式的内容进行替换。

具体地,这行代码使用正则表达式 'USERNAME=([^%c]+)\n+' 来匹配 content 字符串中以 "USERNAME=" 开头,紧跟着一个或多个非控制字符(除了控制字符外的任意字符),并以一个或多个换行符结尾的部分。匹配到的部分将被替换为空字符串。

换句话说,该代码的目的是将 content 字符串中形如 "USERNAME=" 开头的行(行结尾有一个或多个换行符)删除或替换为空字符串。

AI 帮你重构代码

我们经常能在工作中看到写几百行甚至上千行的方法,碰到这样的代码,我们内心只有一句 MMP 能表达。

AI 时代,不用为此忧心了。

我尝试把我碰到的几百行的方法输入给 GPT,我发现它能很好的帮助我拆解长方法。

但是公司的代码不好拿出来秀,我在网上找了一段代码,我们可以看看效果。

prompt:

List purchaseInfoList = sheet.getPurchaseInfoList().stream().filter(purchaseInfo -> purchaseInfo.getExteriorOperation().getExteriorPart().getExteriorOperationList().stream() .filter(exteriorOperation -> exteriorOperation.getProcessState().equals(ExteriorOperation.ProcessState.PROCESSING)).count() != 0 ------------------------------------------------ 上面的 Java 代码太难阅读了,非常影响代码理解,请帮我拆分上面的 Java 代码,不改变代码意思,但是更容易读懂

输出:

以下是拆分后的 Java 代码,更易于理解:

ini 复制代码
List<PurchaseInfo> purchaseInfoList = sheet.getPurchaseInfoList();

List<PurchaseInfo> filteredPurchaseInfoList = purchaseInfoList.stream()
    .filter(purchaseInfo -> {
        List<ExteriorOperation> exteriorOperationList = purchaseInfo.getExteriorOperation().getExteriorPart().getExteriorOperationList();
        long processingCount = exteriorOperationList.stream()
            .filter(exteriorOperation -> exteriorOperation.getProcessState().equals(ExteriorOperation.ProcessState.PROCESSING))
            .count();
        return processingCount != 0;
    })
    .collect(Collectors.toList());

大模型返回:

  1. 首先获取 sheet 对象中的 purchaseInfoList 列表。
  2. 使用 stream() 方法将 purchaseInfoList 转换成流。
  3. 使用 filter() 方法过滤出符合条件的 PurchaseInfo 对象,条件为:该对象中的 ExteriorOperation 对象列表中,至少有一个对象的 processState 属性为 PROCESSING
  4. filter() 方法中,使用 lambda 表达式实现过滤条件。首先获取当前 PurchaseInfo 对象中的 ExteriorOperation 对象列表,然后使用 stream() 方法将其转换成流。
  5. ExteriorOperation 对象流中,使用 filter() 方法过滤出 processState 属性为 PROCESSING 的对象,然后使用 count() 方法获取符合条件的对象数量。
  6. 最后,判断符合条件的对象数量是否不为 0,如果是,则表示该 PurchaseInfo 对象符合过滤条件。
  7. 使用 collect() 方法将符合条件的 PurchaseInfo 对象收集到一个新的列表中,并返回该列表。

我们看到,GPT 不仅帮帮我们做了代码拆分,还格式化了我们的代码,让代码可读性更高,甚至还解释了每段代码的意思。

是不是很棒,赶紧去试用吧!

相关推荐
慧一居士几秒前
Kafka批量消费部分处理成功时的手动提交方案
分布式·后端·kafka
命中的缘分32 分钟前
SpringCloud原理和机制
后端·spring·spring cloud
ErizJ32 分钟前
Golang|分布式索引架构
开发语言·分布式·后端·架构·golang
.生产的驴32 分钟前
SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换
java·开发语言·spring boot·后端·前端框架
Howard_Stark36 分钟前
Spring的BeanFactory和FactoryBean的区别
java·后端·spring
饮长安千年月37 分钟前
学生管理系统审计
java·网络安全·代码审计
-曾牛1 小时前
Spring Boot中@RequestParam、@RequestBody、@PathVariable的区别与使用
java·spring boot·后端·intellij-idea·注解·spring boot 注解·混淆用法
Blossom.1181 小时前
可解释人工智能(XAI):让机器决策透明化
人工智能·驱动开发·深度学习·目标检测·机器学习·aigc·硬件架构
康斯坦丁师傅1 小时前
深夜突袭,阿里Qwen3登顶全球开源王座!暴击DeepSeek-R1
aigc·openai
新时代苦力工1 小时前
处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
java·数据结构·list