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

2023-10-30 14:20
文章标签 代码 方法 注释 几百

本文主要是介绍代码没注释?一个方法几百行?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

干程序员的都有接收别人的代码的经历,大部分时候,我们都会偷偷骂一句“这人是傻逼吧,这代码写的这么烂!”

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

现在,你不需要为这个事情担心了。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 代码,更易于理解:

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 不仅帮帮我们做了代码拆分,还格式化了我们的代码,让代码可读性更高,甚至还解释了每段代码的意思。

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

这篇关于代码没注释?一个方法几百行?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308507

相关文章

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN