大家好,我是伍六七。
干程序员的都有接手别人的代码的经历,大部分时候,我们都会偷偷骂一句“这人是SB吧,这代码写的这么烂!”
“一个方法写几百行,还没有注释,鬼知道写的什么东西!”
现在,你不需要为这个事情担心了。AI 可以帮你生成注释,代码拆分。
AI 帮你生成注释
接手别人的代码,很多人写代码都没有注释,变量命名也是一言难尽,这个时候,你直接把代码输入给 GPT,它能很好的帮助你理解代码的意思,减少接手别人代码的痛苦。
prompt:
一段 Spring Webflux 代码
大模型返回:
这段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 代码,更易于理解:
代码语言:javascript复制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());
大模型返回:
- 首先获取
sheet
对象中的purchaseInfoList
列表。 - 使用
stream()
方法将purchaseInfoList
转换成流。 - 使用
filter()
方法过滤出符合条件的PurchaseInfo
对象,条件为:该对象中的ExteriorOperation
对象列表中,至少有一个对象的processState
属性为PROCESSING
。 - 在
filter()
方法中,使用 lambda 表达式实现过滤条件。首先获取当前PurchaseInfo
对象中的ExteriorOperation
对象列表,然后使用stream()
方法将其转换成流。 - 在
ExteriorOperation
对象流中,使用filter()
方法过滤出processState
属性为PROCESSING
的对象,然后使用count()
方法获取符合条件的对象数量。 - 最后,判断符合条件的对象数量是否不为 0,如果是,则表示该
PurchaseInfo
对象符合过滤条件。 - 使用
collect()
方法将符合条件的PurchaseInfo
对象收集到一个新的列表中,并返回该列表。
我们看到,GPT 不仅帮帮我们做了代码拆分,还格式化了我们的代码,让代码可读性更高,甚至还解释了每段代码的意思。
是不是很棒,赶紧去试用吧!