0


IDEA 通义灵码 插件使用体验

前言

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

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

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

主要功能

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

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

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

演示代码

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

  1. public class ProductService {
  2. public PageVO<Product> getProducts(ProductQueryFrom form) {
  3. int page = Objects.isNull(form) ? 1 : form.getPage();
  4. int rows = Objects.isNull(form) ? 25 : form.getRows();
  5. Sort sort = Sort.by(Sort.Direction.DESC, "id");
  6. Pageable pageable = PageRequest.of(page - 1, rows, sort);
  7. Page<Product> pageEntity;
  8. if (Objects.nonNull(form) && StringUtils.hasText(form.getKeyWord())) {
  9. Specification<Product> spec = (root, query, builder) -> {
  10. Predicate target = builder.disjunction();
  11. target.getExpressions().add(
  12. target.getExpressions().add(
  13. builder.like(root.get("partNo"), "%" + form.getKeyWord() + "%"));
  14. return target;
  15. };
  16. pageEntity = productDao.findAll(spec, pageable);
  17. } else {
  18. pageEntity = productDao.findAll(pageable);
  19. }
  20. PageVO<Product> vo = new PageVO();
  21. vo.setList(pageEntity.getContent());
  22. vo.setTotal(pageEntity.getTotalElements());
  23. vo.setPages(pageEntity.getTotalPages());
  24. return vo;
  25. }
  26. }

解释代码

生成的结果如下:

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

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

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

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

生成单元测试

生成结果如下:

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

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

生成代码注释

生成结果如下:

  1. public class ProductService {
  2. /**
  3. * 获取产品列表的分页信息。
  4. * . * @param form 包含查询条件和分页信息的请求对象。可选参数,如果为空,则默认查询第一页,每页25条记录。
  5. * @return 返回产品列表的分页视图对象(PageVO),包含产品列表、总记录数和总页数。
  6. */
  7. public PageVO<Product> getProducts(ProductQueryFrom form) {
  8. // 设置默认页码和每页记录数
  9. int page = Objects.isNull(form) ? 1 : form.getPage();
  10. int rows = Objects.isNull(form) ? 25 : form.getRows();
  11. // 定义排序规则,默认按id降序排序
  12. Sort sort = Sort.by(Sort.Direction.DESC, "id");
  13. // 根据页码、每页记录数和排序规则,创建Pageable对象
  14. Pageable pageable = PageRequest.of(page - 1, rows, sort);
  15. // 如果form非空且包含关键字,则构建带关键字的查询条件
  16. Page<Product> pageEntity;
  17. if (Objects.nonNull(form) && StringUtils.hasText(form.getKeyWord())) {
  18. // 构建Specification,用于动态生成查询条件
  19. Specification<Product> spec = (root, query, builder) -> {
  20. Predicate target = builder.disjunction();
  21. target.getExpressions().add(
  22. target.getExpressions().add(
  23. builder.like(root.get("partNo"), "%" + form.getKeyWord() + "%"));
  24. return target;
  25. };
  26. // 执行查询
  27. pageEntity = productDao.findAll(spec, pageable);
  28. } else {
  29. // 如果没有关键字,则直接按pageable条件查询
  30. pageEntity = productDao.findAll(pageable);
  31. }
  32. // 封装查询结果到PageVO对象中,返回
  33. PageVO<Product> vo = new PageVO();
  34. vo.setList(pageEntity.getContent());
  35. vo.setTotal(pageEntity.getTotalElements());
  36. vo.setPages(pageEntity.getTotalPages());
  37. return vo;
  38. }
  39. }

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

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

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

生成优化建议

生成结果如下:

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

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

代码片段补全

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

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

总结

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

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


本文转载自: https://blog.csdn.net/typeracer/article/details/142070206
版权归原作者 编程经验分享 所有, 如有侵权,请联系我们删除。

“IDEA 通义灵码 插件使用体验”的评论:

还没有评论