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 键就完全搞定了,比起自己去复制粘贴快了不少。

总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定&#xff0c;以Wi-Fi直连&#xff08;Wi-Fi Direct&#xff09;为基础的无线显示标准。支持此标准的消费性电子产品&#xff08;又称3C设备&#xff09;可透过无线方式分享视频画面&#xff0c;例如…

VirtualBox 克隆已有的虚拟机

【前提】已经存在一个CentOS 7 虚拟机 【需求】克隆出来一个虚拟机,用于本机 【操作】 1.右击已有的虚拟机 -> 选择克隆 2.给新虚拟机起个名称 以及 生成新的MAC地址 3.克隆 4.修改网络和主机名称 # 修改网络编辑以下2个文件 vi /etc/sysconfig/network-scripts/ifcfg-enp…

Java之内部类

目录 实例内部类 静态内部类 局部内部类 匿名内部类 下面将讲解实例内部类&#xff0c;静态内部类&#xff0c;局部内部类和匿名内部类。 实例内部类 实例内部类&#xff08;也称为非静态内部类&#xff09;依赖于外部类的实例。这意味着&#xff0c;要创建实例内部类的实…

Kubernetes从零到精通(12-Ingress、Gateway API)

Ingress和Gateway API都是Kubernetes中用于管理外部访问集群服务的机制&#xff0c;但它们有不同的设计理念和适用场景。它们的基本原理是通过配置规则&#xff0c;将来自外部的网络流量路由到Kubernetes集群内部的服务上。 Ingress/Gateway API和Service Ingress/Gateway API…

Qt窗口——QToolBar

文章目录 工具栏创建工具栏设置toolTip工具栏配合菜单栏工具栏浮动状态 工具栏 QToolBar工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。 可以有多个&#xff0c;也可以没有。 创建工具栏 #include "mainwindow.h" #include "ui_mainwindow.h&qu…

ARM 工业边缘计算机与 C# 编程的完美融合

在工业领域&#xff0c;随着智能化和数字化的不断推进&#xff0c;ARM 工业边缘计算机凭借其出色的性能和低功耗等优势&#xff0c;逐渐成为众多应用场景的重要支撑。而 C# 编程语言的强大功能和广泛适用性&#xff0c;使其在与 ARM 工业边缘计算机的结合中展现出了巨大的潜力。…

壹嘉情,中国与世界经济文化交流的新桥梁

壹嘉情正在全球华商领域迅速崛起。作为意大利华商总会的中国分部&#xff0c;壹嘉情承载着推动两岸及全球华商深度合作、实现资源共享和互利共赢的使命。它的成立标志着意大利华商总会在全球战略布局上的重要一步&#xff0c;同时也昭示了全球化浪潮中&#xff0c;华人企业正加…

LNMP的简单安装(ubuntu)

LNMP介绍 LNMP 是一种常见的开源软件组合&#xff0c;用于搭建高效的网站服务器环境。LNMP 代表以下四个组件&#xff1a; Linux&#xff1a;操作系统。Linux 是一种稳定、可靠、安全的开源操作系统&#xff0c;常用于服务器环境&#xff0c;特别是在企业级部署中。它负责底层…

小程序——生命周期

文章目录 运行机制更新机制生命周期介绍应用级别生命周期页面级别生命周期组件生命周期生命周期两个细节补充说明总结 运行机制 用一张图简要概述一下小程序的运行机制 冷启动与热启动&#xff1a; 小程序启动可以分为两种情况&#xff0c;一种是冷启动&#xff0c;一种是热…

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的&#xff1f;3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

【JVM安装MySQL】

环境 > VMware Workstation Pro > CentOS 7 >Navicat Premium Lite > MobaXterm添加 MySQL Yum 仓库 根据操作系统在下载界面选取对应yum库进行下载 wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm在文件下载界面安装 rpm -ivh mysq…

<<编码>> 第 14 章 反馈与触发器(3)--锁存器与触发器 示例电路

电平触发 D 型触发器 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 因复位和置位不应同时处在高电平, 因此在输入处加入一个非门反向, 然后复位和置位输入合并为 数据(Data) 输入 注: 当保持位为 0 时, 数据输入无效 primary::在线交互操作链接 https://cc.xiaogd.net/?star…

Stylized Smooth Clouds 卡通风格化云朵包

下载:​​Unity资源商店链接资源下载链接 效果图:

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化)&#xff0c;简单描述框架组成 Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c; 为Java应用程序开发…

数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型&#xff1a;reg型&#xff0c;wire型&#xff0c;integer型&#xff0c;parameter型 reg型   reg类型是寄存器数据类型的关键字。寄存…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑

点日志点照机图标选一个路径保存图片在ide中右键图片&#xff0c;点复制电脑随便找个位置保存图片https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-screenshot-V5

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

IE浏览器彻底去除浏览器缓存的方法

1.浏览器右上方如图操作 2.点击后会弹出窗口&#xff0c;如图操作 3.点击查看文件如图操作 4&#xff0e;点击后会弹出一个文件夹&#xff0c;在文件夹内CtrlA全选删除全部文件就可以&#xff0c;有提示直接确认即可

智能车镜头组入门(三)巡线

镜头组的特点是通过摄像头来获取赛道的信息&#xff0c;从而达到前瞻的效果&#xff0c;完成转向和速度决策。 我们的方案&#xff0c;带上元素识别&#xff0c;大概在TC264上5ms一帧&#xff0c;所以我们开了100hz的图象。 之前我看别的博客上有人说&#xff0c;他们组的50帧…