IDEA 通义灵码 插件使用体验

目录

前言

主要功能

演示代码

解释代码

生成单元测试

生成代码注释

生成优化建议

代码片段补全

总结


前言

自从 AI 技术开始大规模应用,老板就想让下面的牛马借助 AI 工具来提高编码效率,由于团队都没有在实际编码中深度使用过 AI 工具,所以专门调研了市面上比较出名的 AI 辅助写代码工具,实际尝试使用的有两个,一个是微软的 copilot,另一个是阿里的通义灵码。

总所周知的原因,国内使用 copilot 比较麻烦,所以最后在实践中还是使用了阿里的通义灵码,idea中直接安装 TONYYI Lingma 插件,使用支付宝账号直接登录就能免费使用了。

以下是对通义灵码的使用体验

主要功能

IDEA 安装通义灵码后,在打开的文件中右键,即可看到通义灵码选项,提供了五个功能:

  1. 解释代码
  2. 生成单元测试
  3. 生成代码注释
  4. 生成优化建议
  5. 代码片段补全

使用时,只需先选中代码片段,然后点击对应的选项,或者直接用快捷键。便能够快速生成想要的结果,辅助开发,提高效率。

演示代码

以下功能全都使用以下代码来做演示,是一个常见的列表查询接口,如果有关键字,则根据关键字模糊分页查询,否则直接分页查询,最后返回分页查询接口

public class ProductService {

    public PageVO<Product> getProducts(ProductQueryFrom form) {
        int page = Objects.isNull(form) ? 1 : form.getPage();
        int rows = Objects.isNull(form) ? 25 : form.getRows();
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        Pageable pageable = PageRequest.of(page - 1, rows, sort);
        Page<Product> pageEntity;
        if (Objects.nonNull(form) && StringUtils.hasText(form.getKeyWord())) {
            Specification<Product> spec = (root, query, builder) -> {
                Predicate target = builder.disjunction();
                target.getExpressions().add(
                 target.getExpressions().add(
                        builder.like(root.get("partNo"), "%" + form.getKeyWord() + "%"));
                return target;
            };
            pageEntity = productDao.findAll(spec, pageable);
        } else {
            pageEntity = productDao.findAll(pageable);
        }
        
        PageVO<Product> vo = new PageVO();
        vo.setList(pageEntity.getContent());
        vo.setTotal(pageEntity.getTotalElements());
        vo.setPages(pageEntity.getTotalPages());
        return vo;
    }
}

解释代码

生成的结果如下:

先整体概括了该方法实现的功能,再将方法实现的逻辑依次罗列了出来。

在工作中,需要维护到一些没有任何注释,且随意开发,不遵守规范的代码,再加上对业务逻辑不熟悉,维护起来是相当困难的。

使用该功能来解释不熟悉的代码模块,能让人快速了解该代码模块实现的功能,而不用去了解代码实现的细节,能让维护人员少掉几根头发。

也可以用来为自己写的代码生成注释。

生成单元测试

生成结果如下:

直接为代码中的每个逻辑分支生成了相应的测试用例,可以直接将内容复制到单元测试类中使用。虽然生成的测试用例可能会有一些需要调整的地方,也极大地提高了写单元测试地效率。

实际工作中会发现很多程序员根本不写单元测试,也不知道单元测试要如何去写,使用通义灵码生成的单元测试就有很大的参考价值。

生成代码注释

生成结果如下:

public class ProductService {
    /**
     * 获取产品列表的分页信息。
     * .     * @param form 包含查询条件和分页信息的请求对象。可选参数,如果为空,则默认查询第一页,每页25条记录。
     * @return 返回产品列表的分页视图对象(PageVO),包含产品列表、总记录数和总页数。
     */
    public PageVO<Product> getProducts(ProductQueryFrom form) {
        // 设置默认页码和每页记录数
        int page = Objects.isNull(form) ? 1 : form.getPage();
        int rows = Objects.isNull(form) ? 25 : form.getRows();

        // 定义排序规则,默认按id降序排序
        Sort sort = Sort.by(Sort.Direction.DESC, "id");

        // 根据页码、每页记录数和排序规则,创建Pageable对象
        Pageable pageable = PageRequest.of(page - 1, rows, sort);

        // 如果form非空且包含关键字,则构建带关键字的查询条件
        Page<Product> pageEntity;
        if (Objects.nonNull(form) && StringUtils.hasText(form.getKeyWord())) {

            // 构建Specification,用于动态生成查询条件
            Specification<Product> spec = (root, query, builder) -> {
                Predicate target = builder.disjunction();
                target.getExpressions().add(
                 target.getExpressions().add(
                        builder.like(root.get("partNo"), "%" + form.getKeyWord() + "%"));
                return target;
            };
            // 执行查询
            pageEntity = productDao.findAll(spec, pageable);
        } else {
            // 如果没有关键字,则直接按pageable条件查询
            pageEntity = productDao.findAll(pageable);
        }

        // 封装查询结果到PageVO对象中,返回
        PageVO<Product> vo = new PageVO();
        vo.setList(pageEntity.getContent());
        vo.setTotal(pageEntity.getTotalElements());
        vo.setPages(pageEntity.getTotalPages());
        return vo;
    }
}

可以看到为每一段相对独立的代码逻辑都生成了对应的注释。生成的注释语义也准确,当然这也是因为程序比较简单,所以生成注释的效果还凑合。

不过个人觉得如果开发对变量名字起名规范,其实就相当于自带注释了,过多的注释反而显得啰嗦。

如果要写注释,则是用精炼的语句来概括一段代码逻辑,这个功能其实用上面 解释代码 便能够很好的实现。

生成优化建议

生成结果如下:

提出代码潜在的风险,并给出了优化建议,还会生成优化后的代码。

虽然生成的内容看起来很有条理,不过细看的话,里面有可靠的建议,也有一些正经的胡说八道。并不能完全信赖它,还需要开发人员自己去甄别。此外,一些优化建议个人觉得优点过度设计了,还是得根据实际项目情况来定。故这个优化建议作为辅助功能最合适。

代码片段补全

代码片段补全是最常用的功能,每次输入完或者回车后,都会智能预测可能的代码,如果刚好合适,则直接用 Tab 键补全,不合适则自己写,写完停下后,则会根据当前输入的内容再进行智能预测。

这个功能是否好用完全取决于它预测的准确率,在写业务逻辑中,如果经常需要写一些重复的业务逻辑,那使用代码片段补全开发效率还是非常高的。只要有写过相似的业务逻辑,预测的准确率非常高,一段业务逻辑几下 Tab 键就完全搞定了,比起自己去复制粘贴快了不少。

总结

代码补全单元测试解释代码,这三种功能直接投入到日常开发中,用来提高工作效率。

另外两种功能,生成代码注释能直接用解释代码来平替,优化建议则是作为一个辅助工具使用,使用时需要开发人员自己甄别,根据实际情况决定是否优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/876082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?

TSINGSEE青犀视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可…

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

【深度学习】神经网络-怎么分清DNN、CNN、RNN?

怎么分清DNN、CNN、RNN&#xff1f; 最“大”的概念是人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;&#xff0c;它是较为广泛的术语&#xff0c;通常指的是一类模拟生物神经网络的数学模型&#xff0c;其中包括神经元、权重和连接。在这个术语下&#…

【Redis】主从复制 - 源码

因为主从复制的过程很复杂, 同时核心逻辑主要集中在 replication.c 这个文件中, 避免篇幅过大, 所以将主从复制中涉及这个文件的代码集中到了另一篇文章。 在当前文章主要分析主从复制的大体代码逻辑, 如果需要了解整体的过程, 可以配合 Redis 主从复制 - relication 源码分析 …

iOS 知识点记录

王巍 博客地址&#xff1a;OneVs Den git地址&#xff1a;onevcat (Wei Wang) GitHub 江湖人称喵神&#xff0c;目前就职于line。喵神的博客涉及方面比较广, 有Obejctive-C, Swift, SwiftUI, Unity等等。博客内容很有深度&#xff0c;非常值得关注。 戴铭 博客地址&#xff1…

ESP32-WROOM-32 开篇(刚买)

简介 买了一个ESP32-WROOM-32模块的开发板, 记录板初上机细节。 模块简介 Look 连接PC 1. 解决驱动问题 https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tabdownloads 下载驱动, 如下图 解压缩下载的包&#xff0c; 然后电机64位的版本&#xff0c; 一直…

汽车无钥匙启动功能工作原理

移‌动管家无钥匙启动‌是一种科技化的汽车启动方式&#xff0c;它允许车主在不使用传统钥匙的情况下启动车辆。这种技术通过智能感应系统实现&#xff0c;车主只需携带智能钥匙&#xff0c;当靠近车辆时&#xff0c;车辆能够自动解锁并准备启动。启动车辆时&#xff0c;车主无…

友思特方案 | 搭建红外桥梁:嵌入式视觉接口助力红外热像仪传输

导读 为红外成像设备数据传输快速搭桥&#xff01;友思特嵌入式视觉接口能帮助用户快速享有 GigE Vision 协议优势&#xff0c;是红外成像设备视觉接口集成、开发高性能相机的高效快捷方案。 引言 红外热像仪作为一种非接触式设备&#xff0c;能够检测红外能量&#xff08;热量…

CSS实现前端布局更巧妙的方案!在 flex 布局中通过使用 margin 实现水平垂直居中以及其他常见的前端布局

在前端开发中&#xff0c;实现水平垂直居中一直是个热门话题。随着 CSS Flexbox 布局的普及&#xff0c;开发者们开始更多地使用 justify-content 和 align-items 这两个属性来解决这个问题。 然而&#xff0c;还有一种更加简洁、灵活的方式——使用 margin: auto; 来实现居中以…

Grafana面板-linux主机详情(使用标签过滤主机监控)

1. 采集器添加labels标签区分业务项目 targets添加labels &#xff08;模板中使用的project标签&#xff09; … targets: [‘xxxx:9100’] labels: project: app2targets: [‘xxxx:9100’] labels: project: app1 … 2. grafana面板套用 21902 模板 演示

UE5 阴影通道

Shadow Pass Switch节点中 Default代表模型遮罩的效果 Shadow代表阴影的生成遮罩效果

3. 进阶指南:自定义 Prompt 提升大模型解题能力

怎么判断 Prompt 的好坏&#xff0c;有什么问题有着标准答案么&#xff1f; 答&#xff1a;让大模型求解数学问题。 李宏毅老师的 HW4 正好提到了有关数学问题的 Prompt&#xff0c;所以我决定中间插一篇这样的文章。通过本文你将&#xff1a; 了解各种 Prompt 如何影响大型语言…

从C语言过渡到C++

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;C &#x1f3c5;往期回顾&#x1f3c6;&#xff1a;单链表实现&#xff1a;从理论到代码-CSDN博客&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱的博客-CSDN博客 目录 ​…

HOT 100(七)栈、堆、贪心算法

一、栈 1、每日温度 使用单调递减栈来解决。主要思路是遍历temperatures数组&#xff0c;利用栈来存储还没有找到比当前温度高的天数的索引。当遇到比栈顶索引所对应温度更高的温度时&#xff0c;就可以确定当前这一天的温度比之前那一天高。索引的差值就是等待的天数。 求一…

Golang数据流处理:掌握Reader和Writer接口的技巧

Golang数据流处理&#xff1a;掌握Reader和Writer接口的技巧 引言理解Reader和Writer接口Reader接口的定义和基本方法Writer接口的定义和基本方法 Reader接口的深入探讨Reader接口的实现示例使用io.Reader读取文件内容从网络连接中读取数据 常用Reader类型及其应用场景strings.…

相图的科学应用,陶瓷材料创新

陶瓷材料因其优异的物理和化学性能&#xff0c;在航空航天、电子、生物医学等多个领域展现出广阔的应用前景。陶瓷材料的性能很大程度上取决于其微观结构&#xff0c;包括晶粒大小、相组成和分布。相图作为描述陶瓷材料在不同条件下的相变行为和相平衡关系的图表反映了陶瓷材料…

10年Python程序员教你多平台采集10万+电商数据【附实例】

10万级电商数据采集需要注意什么&#xff1f; 在进行10万级电商数据采集时&#xff0c;有许多关键因素需要注意&#xff1a; 1. 采集平台覆盖&#xff1a;确保可以覆盖主流的电商平台&#xff0c;如淘宝、天猫、京东、拼多多等。 2. 数据字段覆盖&#xff1a;检查是否可以对平…

什么是VHDX文件?

VHDX文件是Docker环境中使用的一种虚拟硬盘文件格式&#xff0c;专门用于存储Docker容器 的镜像和数据。这种文件格式&#xff0c;VHDX&#xff0c;代表Virtual Hard Disk Extended&#xff0c;是一种用于虚拟化环境的硬盘文件格式&#xff0c;支持动态扩展、快照、加密等功能&…

python基础知识 (五)--容器、索引、切片、字符串的遍历、查找、修改元素

目录 容器 容器大总结 索引 切片 字符串的遍历 for循环语法&#xff1a; while循环语法&#xff1a; 查找元素 修改元素 例题 1.验证码 2.抽取大红包 3.a和b互换位置 容器 在Python中&#xff0c;常见容器有&#xff1a; &#xff08;1&#xff09;字符串&#x…

C++:类和对象全解

C&#xff1a;类和对象全解 一、类的定义和初始化&#xff08;一&#xff09;类的定义1、类的成员变量&#xff08;1&#xff09;成员变量&#xff08;2&#xff09;成员函数 2、实例化对象&#xff08;1&#xff09;采用普通构造函数&#xff08;2&#xff09;采用初始化列表 …