IDEA中通义灵码的使用本领

打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

大家好,我是 V 哥。在日常写代码的过程中,通过 AI 工具辅助开发已是当下程序员惯用的方式,V 哥在使用了众多的 AI 工具后,多数环境下,选择通义灵码来辅助开发,尤其是解释代码和生成单位测试功能甚是好用,听 V 哥来详细聊聊。
通义灵码安装

打开你的 IDEA 开发工具,在菜单栏中选择Settings,打开设置窗口,在左侧栏中选择 Plugins,在 Marketplace 的搜刮栏中输入“通义灵码”,搜刮结果的第一个就是通义灵码 AI 插件了,点击 Install 安装插件后,重启 IDE 即可安装乐成。

重启IDEA后,在右侧会出现通义灵码选项,此时,就可以使用通义灵码来辅助编程啦。

使用前,请先使用阿里账号进行登录,V 哥的账号是威哥爱编程。
通过通义灵码 AI 工具解释代码

V 哥写了一个 DFS 算法,代码如下:
  1. /**
  2. * description:
  3. * author: V哥
  4. * wx:finally-weige
  5. */
  6. public class DFSMazeSolver {
  7.     private static final int[] DX = {-1, 1, 0, 0}; // 行移动方向:上,下
  8.     private static final int[] DY = {0, 0, -1, 1}; // 列移动方向:左,右
  9.     public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
  10.         int rows = maze.length;
  11.         int cols = maze[0].length;
  12.         // 边界条件与目标判断
  13.         if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
  14.             return false;
  15.         }
  16.         // 到达终点
  17.         if (x == rows - 1 && y == cols - 1) {
  18.             return true;
  19.         }
  20.         // 标记当前位置已访问
  21.         visited[x][y] = true;
  22.         // 递归地探索四个方向
  23.         for (int i = 0; i < 4; i++) {
  24.             int newX = x + DX[i];
  25.             int newY = y + DY[i];
  26.             if (dfs(maze, newX, newY, visited)) {
  27.                 return true;
  28.             }
  29.         }
  30.         // 回溯
  31.         visited[x][y] = false;
  32.         return false;
  33.     }
  34.     public boolean canSolveMaze(int[][] maze) {
  35.         int rows = maze.length;
  36.         int cols = maze[0].length;
  37.         boolean[][] visited = new boolean[rows][cols];
  38.         return dfs(maze, 0, 0, visited);
  39.     }
  40.     public static void main(String[] args) {
  41.         int[][] maze = {
  42.                 {1, 0, 0, 0},
  43.                 {1, 1, 0, 1},
  44.                 {0, 1, 0, 0},
  45.                 {1, 1, 1, 1}
  46.         };
  47.         DFSMazeSolver solver = new DFSMazeSolver();
  48.         if (solver.canSolveMaze(maze)) {
  49.             System.out.println("路径可达");
  50.         } else {
  51.             System.out.println("无可行路径");
  52.         }
  53.     }
  54. }
复制代码
从代码上看,我已经加了少量代码注释,但对于小白大概初学者来说,想要完全明确代码的含义还是有些困难,下面我们来看看通义灵码的解释代码功能如何。
我们在代码中可以看到有通义灵码的图标标识,下拉打开后,即可以非常方便的使用助手功能了。

我们选择解释代码功能,通义灵码就是会以此方法 dfs 为目的,解释此方法的代码含义,我们来试试。

我们可以看到,在右侧通义灵码的功能区里会把目的方法的代码选中,下方是 dfs 方法的具体解释,从解释来看,基本达到了代码的含义明确,如果你不满意,还可以重新生成,通常 V 哥会使用更详细的解释功能,我们点击更详细来看看。



这样生成的代码解释就很详细了,看一下解释的内容对不对,V 哥仔细查看,不放过每一个字,结果堪称完美,你可以试试。
通过通义灵码 AI 工具生成单位测试

通过通义灵码的生成单位测试功能,也是这款AI 工具的亮点,在代码的 dfs 方法的通义灵码图标,选择生成单位测试功能。

我们就可以在右侧通义灵码的功能区看到生成的测试代码了。

完整生成的测试代码如下:
  1. package com.example.mazesolver;
  2. import java.util.*;
  3. import java.math.*;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import static org.junit.Assert.assertTrue;
  7. import static org.junit.Assert.assertFalse;
  8. public class DFSMazeSolverTest {
  9.     private DFSMazeSolver solver;
  10.     @Before
  11.     public void setUp() {
  12.         solver = new DFSMazeSolver();
  13.     }
  14.     @Test
  15.     public void testDfs_SimplePath_ReturnsTrue() {
  16.         int[][] maze = {
  17.             {1, 0, 0},
  18.             {1, 1, 0},
  19.             {1, 1, 1}
  20.         };
  21.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  22.         assertTrue(solver.dfs(maze, 0, 0, visited));
  23.     }
  24.     @Test
  25.     public void testDfs_NoPath_ReturnsFalse() {
  26.         int[][] maze = {
  27.             {0, 0, 0},
  28.             {0, 0, 0},
  29.             {0, 0, 0}
  30.         };
  31.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  32.         assertFalse(solver.dfs(maze, 0, 0, visited));
  33.     }
  34.     @Test
  35.     public void testDfs_AlreadyVisitedCell_ReturnsFalse() {
  36.         int[][] maze = {
  37.             {1, 0, 0},
  38.             {1, 1, 0},
  39.             {1, 1, 1}
  40.         };
  41.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  42.         visited[0][0] = true;
  43.         assertFalse(solver.dfs(maze, 0, 0, visited));
  44.     }
  45.     @Test
  46.     public void testDfs_MazeTooSmall_ReturnsFalse() {
  47.         int[][] maze = {
  48.             {0}
  49.         };
  50.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  51.         assertFalse(solver.dfs(maze, 0, 0, visited));
  52.     }
  53.     @Test
  54.     public void testDfs_MazeWithMultiplePaths_ReturnsTrue() {
  55.         int[][] maze = {
  56.             {1, 1, 0},
  57.             {0, 1, 1},
  58.             {0, 0, 1}
  59.         };
  60.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  61.         assertTrue(solver.dfs(maze, 0, 0, visited));
  62.     }
  63.     @Test
  64.     public void testDfs_MazeWithDeadEnd_ReturnsFalse() {
  65.         int[][] maze = {
  66.             {1, 0, 0},
  67.             {0, 0, 0},
  68.             {0, 0, 1}
  69.         };
  70.         boolean[][] visited = new boolean[maze.length][maze[0].length];
  71.         assertFalse(solver.dfs(maze, 0, 0, visited));
  72.     }
  73. }
复制代码
哇塞,看到代码你是不是跟 V 哥一样的惊叹,我们还可以通过下方的解释代码来资助你明确测试代码的逻辑和含义。





把测试代码拿过来,测试一下看是否可以正常测试代码,结果是没有问题的,在测试中,可以根据自己的需求修改修改就OK 了。

通义灵码生成代码注释功能

通过代码解释功能的使用可以看出,生成代码注释肯定也是 OK 的,功能上貌似有些重复了,这里发起两个功能可以合并一下,比如把类注释的内容也加到解释代码中,把解释好的代码可以在右侧栏中直接一键插入即可。个人发起,当然官方估计看不到我的发起。

完整的代码注注释如下:
  1. /**
  2. * 使用深度优先搜索(DFS)在迷宫中寻找从起点到终点的路径
  3. *
  4. * @param maze    表示迷宫的二维数组,其中0代表墙壁,1代表可以通行的路径
  5. * @param x       当前位置的x坐标
  6. * @param y       当前位置的y坐标
  7. * @param visited 一个二维布尔数组,用于标记迷宫中哪些位置已经被访问过
  8. * @return 如果找到了从当前位置到迷宫终点的路径,则返回true;否则返回false
  9. */
  10. public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
  11.     // 获取迷宫的行数和列数
  12.     int rows = maze.length;
  13.     int cols = maze[0].length;
  14.     // 边界条件与目标判断
  15.     // 如果当前位置超出迷宫边界、是墙壁或是已经访问过的位置,则返回false
  16.     if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
  17.         return false;
  18.     }
  19.     // 到达终点
  20.     // 如果当前位置是迷宫的终点,则返回true
  21.     if (x == rows - 1 && y == cols - 1) {
  22.         return true;
  23.     }
  24.     // 标记当前位置已访问
  25.     visited[x][y] = true;
  26.     // 递归地探索四个方向
  27.     // 尝试向四个可能的方向移动,并递归调用DFS如果找到一条路径,则返回true
  28.     for (int i = 0; i < 4; i++) {
  29.         int newX = x + DX[i];
  30.         int newY = y + DY[i];
  31.         if (dfs(maze, newX, newY, visited)) {
  32.             return true;
  33.         }
  34.     }
  35.     // 回溯
  36.     // 如果四个方向都无法到达终点,回溯标记当前位置为未访问,撤销之前的访问标记
  37.     visited[x][y] = false;
  38.     return false;
  39. }
复制代码
下面这段与解释代码是一致的:

通义灵码的生成优化发起功能


生成优化发起功能让 V 哥很好奇,通义灵码会给出怎样的发起呢,我们一起来看一下,通义灵码给出了如下发起,并提供了优化后的代码:

发起修改后的代码如下:
  1. public class MazeSolver {
  2.     // 定义方向数组
  3.     private static final int[] DX = {1, -1, 0, 0};
  4.     private static final int[] DY = {0, 0, 1, -1};
  5.     public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
  6.         // 输入验证
  7.         if (maze == null || visited == null || maze.length == 0 || maze[0].length == 0) {
  8.             throw new IllegalArgumentException("Invalid input: maze or visited array is null or empty");
  9.         }
  10.         if (visited.length != maze.length || visited[0].length != maze[0].length) {
  11.             throw new IllegalArgumentException("Invalid input: visited array size does not match maze array size");
  12.         }
  13.         int rows = maze.length;
  14.         int cols = maze[0].length;
  15.         // 边界条件与目标判断
  16.         if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
  17.             return false;
  18.         }
  19.         // 到达终点
  20.         if (x == rows - 1 && y == cols - 1) {
  21.             return true;
  22.         }
  23.         // 标记当前位置已访问
  24.         visited[x][y] = true;
  25.         // 递归地探索四个方向
  26.         for (int i = 0; i < 4; i++) {
  27.             int newX = x + DX[i];
  28.             int newY = y + DY[i];
  29.             if (dfs(maze, newX, newY, visited)) {
  30.                 return true;
  31.             }
  32.         }
  33.         // 回溯
  34.         visited[x][y] = false;
  35.         return false;
  36.     }
  37. }
复制代码
给出的解释是:
输入验证:在方法开始时添加了对 maze 和 visited 的验证,确保它们不为空且大小一致。
常量界说:将方向数组 DX 和 DY 界说为类的静态常量,提高代码的可读性和可维护性。
注释:增长了注释,使代码更易读。
这些修改不仅提高了代码的安全性和健壮性,还增强了代码的可读性和可维护性。
在通义灵码给出的代码中修改了三处地方,输入验证、常量界说和注释,输入验证和常量界说让 V 哥的代码更加严谨了,在算法实现上没有给出发起,V哥大胆推测,要不就是V 哥的算法实现已经比较完美了,大概灵码也没有更好的算法优化发起了,哈哈。
通义灵码主动联想代码功能

在编码区写代码时,通义灵码还提供了语义级的主动代码联想功能,这个功能有点奇怪,比如我们在 main 方法中就会发起输出 Hello world:

也许通义灵码想做到想我所想,帮我写代码,由于通义灵码基于通义大模子实现,此功能应该会在学习你的编码习惯和代码意图,如果完全学会了,岂非要变成你的克隆吗,还会根据项目中的代码结构来联想,这个功能一旦成熟,那可不得了,期待吧,暂时,V 哥觉得用的还很少。
最后小结一下

总的来说,V 哥在使用通义灵码的过程中,最常用的是解释代码和单位测试的生成,这两部分让我在代码逻辑和测试上大大提高了效率。通义灵码,你有在用吗,欢迎一起交流心得体会。关注威哥爱编程,编码路上我们结伴同行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表