四时宝库

程序员的知识宝库

代码没注释?一个方法几百行?(代码注释怎么写有无标准)

干程序员的都有接手别人的代码的经历,大部分时候,我们都会偷偷骂一句“这人是 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 不仅帮帮我们做了代码拆分,还格式化了我们的代码,让代码可读性更高,甚至还解释了每段代码的意思。

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接