腾讯云AI代码助手:你的代码手替

2024-08-26 08:25:51 浏览数 (2)

1. 前言

近年来,随着人工智能技术的飞速发展,AIGC和大模型成为了科技圈和互联网行业的热门话题。各类AGI产品以其强大的数据处理能力、高效的学习机制以及广泛的应用前景,赢得了广泛关注。我们可以在众多领域使用AI来帮助我们生成文本,图片甚至视频。但是对于编程代码领域,哪个产品更深得我心呢?

上个月接触到了腾讯AI 代码助手,刚开始觉得它与同类的AIGC应用差不多,也就没有太放在心上,可是用了之后,体验感还不错,尤其是再配合腾讯云的其他产品一起使用,甚至有点爱不释手。

5916260414b0c5a2144337cee908e625916260414b0c5a2144337cee908e62

腾讯云 AI 代码助手是由腾讯云自研的一款开发编程提效辅助工具,开发者可以通过插件的方式将 AI 代码助手安装到编辑器中辅助编程工作(VS Code 或者 JetBrians 系列 IDE);而 AI 代码助手插件将提供:自动补全代码、根据注释生成代码、代码解释、生成测试代码、转换代码语言、技术对话等能力。通过腾讯云 AI 代码助手,开发者可以更高效地解决实际编程问题,提高编程效率和代码质量。

今天带大家体验如何快速上手使用腾讯云 AI 代码助手

腾讯云 AI 代码助手安装链接:腾讯云 AI 代码助手

image-20240826003536576image-20240826003536576

2.配置安装腾讯云 AI 代码助手

目前腾讯云 AI 代码助手助手支持 100 种主流的编程语言,同时也支持如 VS Code、IntelliJ IDEA、GoLang、PyCharm、WebStorm等主流编译器。兼容性很好

关于腾讯云 AI 代码助手的入门介绍,请看这篇文章,此次不在详细介绍入门

腾讯云 AI 代码助手入门介绍:https://cloud.tencent.com/document/product/1749/104236

安装配置介绍:https://cloud.tencent.com/document/product/1749/105967

3. AI 代码助手编程实战

在上述第二部分我们通过在vscode上使用腾讯云 AI 代码助手简单了解了其功能特性,下面我们通过一个java项目,了解如何在开发中使用腾讯云 AI 代码助手

测试工具:

操作系统版本:windows 11 专业版

IntelliJ IDEA 版本:2024.1.1

java版本:jre-8u411-windows-x64.exe

Java开发工具包:jdk1.8

Comate 版本:

项目代码:https://download.csdn.net/download/qq_43475285/19694306

3.1 环境配置

关于IDEA的使用安装,这里不做过多介绍,详情请了解IDEA及java官网

IDEA下载:https://www.jetbrains.com/idea/

java下载:https://www.java.com/zh-CN/

java安装配置教程:https://www.java.com/zh-CN/download/help/download_options.html

在配置完基本信息后,我们在IDEA中导入我们的java项目。

此java项目为一个单机版本坦克大战游戏,我们将通过使用腾讯云 AI 代码助手对项目代码进行优化和增加详细注释

image-20240516150442932image-20240516150442932

运行,看一下效果,

加入我们作为一个小白,初次接触这个java项目,项目运行结果为一个坦克大战的单机游戏,但是今天游戏怎么玩并不是我们的关注重点,我需要快速上手了解代码的逻辑结构,以快速对其进行升级优化

1212

我们手动浏览一下代码结构,编辑相对规范一些,但是注释相对较少,类引用逻辑有点混乱

2121

对于新手来说很难快速看懂,那么怎样才能快速入门上手一个java项目呢

传统的方式如下

阅读代码结构:了解项目的目录结构,重点关注主要的源代码文件、配置文件和资源文件。 阅读核心类和模块的代码,特别注意项目中的关键业务逻辑、框架使用方式以及重要的设计模式。 使用调试工具:学会使用IDE的调试功能,通过设置断点、步进执行等方法,深入理解代码的执行流程和数据流向。 查阅文档和注释:仔细阅读项目中的文档和代码注释。良好的注释能够大大加快你对项目理解的速度。 小步快跑:从小的功能或修复开始做起,逐步增加对项目的贡献。实践是学习最快的方式。 提问与交流:加入项目相关的沟通渠道(如Slack、钉钉群、邮件列表),不要害怕提问。团队成员的经验和解答往往能让你少走弯路。 持续学习:Java生态系统庞大,不断有新的框架和技术出现。保持好奇心,持续学习相关技术和最佳实践,对于快速适应新项目非常有帮助。

这次我们体验点不一样的,使用baidu Comate工具来快速帮助我们上手java项目

3.2 配置腾讯云 AI 代码助手工具

选择File--settings

image-20240826004804859image-20240826004804859

然后选择Plugins,右侧搜索腾讯云 AI 代码助手,然后insatll

image-20240826004936970image-20240826004936970

然后重启IDEA

重启IDEA后,系统会提示我们需要登录AI代码助手

重启之后,左下角提升我们需要登录

image-20240826005300910image-20240826005300910

选择登录,同意授权

image-20240826005326293image-20240826005326293

然后返回IDEA,可以看到在左侧就可以使用我们的AI代码助手了

image-20240826005435723image-20240826005435723

3.3 使用腾讯云 AI 代码助手进行代码优化

3.3.1 代码注释优化

首先我需要腾讯云 AI 代码助手帮我梳理一下代码逻辑,首先我们要选中需要分析的代码片段

例如我要了解Tree类的代码,并且需要帮我添加注释

image-20240826005639512image-20240826005639512

我们可以对比一下前后的代码片段

代码语言:java复制
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

//设置界面树和丛林
public class Tree {
	public static final int width = 30;
	public static final int length = 30;
	int x, y;
	TankClient tc ;
	private static Toolkit tk = Toolkit.getDefaultToolkit();
	private static Image[] treeImags = null;
	static {
		treeImags = new Image[]{
				tk.getImage(CommonWall.class.getResource("Images/tree.gif")),
		};
	}
	
	
	public Tree(int x, int y, TankClient tc) {  //Tree的构造方法,传递x,y和tc对象
		this.x = x;
		this.y = y;
		this.tc = tc;
	}
	
	public void draw(Graphics g) {           //画出树
		g.drawImage(treeImags[0],x, y, null);
	}
	
}

Comate生成注释后的代码片段

代码语言:java复制
// 导入必要的库
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

// 定义Tree类
public class Tree {
    // 定义树的宽度和长度
    public static final int width = 30;
    public static final int length = 30;
    // 定义树的坐标
    int x, y;
    // 定义一个TankClient对象,用于处理游戏中的坦克客户端逻辑
    TankClient tc;
    // 定义一个静态的Toolkit对象,用于获取系统资源
    private static Toolkit tk = Toolkit.getDefaultToolkit();
    // 定义一个静态的Image数组,用于存储树的不同状态的图片
    private static Image[] treeImags = null;
    // 静态代码块,用于初始化treeImags数组
    static {
        treeImags = new Image[]{
                tk.getImage(CommonWall.class.getResource("Images/tree.gif")),
        };
    }
    
    // 定义Tree类的构造函数,用于创建树的实例
    public Tree(int x, int y, TankClient tc) {  //Tree类的构造函数,接收x,y坐标和TankClient对象作为参数
        this.x = x;
        this.y = y;
        this.tc = tc;
    }
    
    // 定义draw方法,用于绘制树
    public void draw(Graphics g) {           //绘制树的方法,接收一个Graphics对象作为参数
        g.drawImage(treeImags[0],x, y, null);
    }
}

良好的代码规范和注释标注对于一个大型代码项目来说十分的关键和必要,但是很多程序员并不喜欢写代码注释。通过腾讯云 AI 代码助手来生成代码注释可以极大的减轻程序员的工作压力,同时也能提高代码的易读性。

写代码注释的好处如下:

  1. 提高可读性:注释可以帮助其他开发者(或未来的你)更快地理解代码的功能和工作原理。良好的注释可以概述代码块、函数或类的目的,使得阅读代码就像阅读说明书一样直接明了。
  2. 促进团队协作:在团队开发环境中,注释是沟通的重要工具。它们帮助团队成员理解彼此的思路和实现方式,减少沟通成本,加快开发进度。
  3. 便于维护和调试:随着时间推移,项目会不断迭代和扩展,新加入的开发者或原作者在回顾旧代码时可能会感到困惑。注释能提供上下文信息,说明特定代码段为何如此编写,有助于快速定位问题和进行修改。
3.3.2 代码结构调优

除了生成注释外,还可以对我们编写的代码进行格式优化,来提高执行效率

在项目代码编辑栏中,对于我们创建的java类,腾讯云 AI 代码助手提供函数注释,行间注释,生成单测,代码解释,调优建议等功能

image-20240826010041975image-20240826010041975

查看变更过程

image-20240826010246269image-20240826010246269

运行一下生成的代码,看一下项目能否跑起来

image-20240826010901729image-20240826010901729
3.3.3 自动生成测试案例

单元测试(Unit Testing)是软件开发过程中的重要一环,用于验证代码中的最小可测试单元是否按预期工作。

通过腾讯云 AI 代码助手可以自动生成测试样例

每个测试方法都遵循类似的结构:

  1. 准备测试数据:定义输入值和预期输出值。
  2. 调用被测试方法:使用输入值调用目标方法。
  3. 验证结果:使用JUnit的assertEquals方法比较实际结果与预期结果,确保它们相等。如果结果不符,则测试失败,并打印出错误信息。

使用腾讯云 AI 代码助手生成Tank类单测

image-20240826011041588image-20240826011041588
代码语言:java复制
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class TankClientTest {
    private TankClient tankClient;
    private Tank tank;

    @Before
    public void setUp() {
        tankClient = new TankClient();
        tank = new Tank(100, 100, true, Direction.STOP, tankClient);
    }

    @Test
    public void testTankMovement() {
        tank.move();
        assertEquals(100, tank.getX()); // 假设Tank类有一个getX方法来获取坦克的X坐标
    }

    @Test
    public void testTankTurn() {
        tank.turn(Direction.LEFT);
        assertEquals(Direction.WEST, tank.getDirection()); // 假设Tank类有一个getDirection方法来获取坦克的方向
    }
}
3.3.4 代码优化建议

对于编写的代码,comate还可以提供优化建议,对于大部分初级程序员来说,编写代码最主要考虑的是能够实现需求和功能,对于代码的编码规范,分离点,异常处理考虑还不够周到

comate可以自动生成优化建议,来提高代码的规范性,并自动生成建议代码

  • 遵守编码规范:遵循Java编码规范,如使用驼峰命名法,保持代码风格一致。
  • 分离关注点:随着项目复杂度增加,考虑将不同类型的计算(如加法、减法)拆分成不同的类或方法,遵循单一职责原则。
  • 考虑异常处理:虽然当前示例简单,但在实际项目中应考虑输入验证及异常处理逻辑,比如对除法操作进行分母为零的检查。

选中要生成优化的代码,优化的代码会在左侧生成后,根据是否符合我们需求选择并入到代码中

image-20240826010730742image-20240826010730742

针对这段代码,Comate做了如下优化

优化前

代码语言:java复制
public void draw(Graphics g) {
		if (!live) {
			if (!good) {
				tc.tanks.remove(this); // 删除无效的
			}
			return;
		}

		if (good)
			new DrawBloodbBar().draw(g); // 创造一个血包

		switch (Kdirection) {
							//根据方向选择坦克的图片
		case D:
			g.drawImage(tankImags[0], x, y, null);
			break;

		case U:
			g.drawImage(tankImags[1], x, y, null);
			break;
		case L:
			g.drawImage(tankImags[2], x, y, null);
			break;

		case R:
			g.drawImage(tankImags[3], x, y, null);
			break;

		}

		move();   //调用move函数
	}

优化后

代码语言:java复制
public void keyPressed(KeyEvent e) {  //接受键盘事件
    int key = e.getKeyCode();
    switch (key) {
        case KeyEvent.VK_R:  //当按下R时,重新开始游戏 
            resetGame();
            break;
        case KeyEvent.VK_RIGHT: //监听向右键
            setDirection(Direction.RIGHT);
            break;
        case KeyEvent.VK_LEFT://监听向左键
            setDirection(Direction.LEFT);
            break;
        case KeyEvent.VK_UP:  //监听向上键
            setDirection(Direction.UP);
            break;
        case KeyEvent.VK_DOWN://监听向下键
            setDirection(Direction.DOWN);
            break;
    }
    decideDirection();//调用函数确定移动方向
}

// 新增方法:重置游戏
private void resetGame() {
    tc.tanks.clear();  //清理
    tc.bullets.clear();
    tc.trees.clear();
    tc.otherWall.clear();
    tc.homeWall.clear();
    tc.metalWall.clear();
    tc.homeTank.setLive(false);
    if (tc.tanks.size() == 0) {   //当在区域中没有坦克时,就出来坦克      
        for (int i = 0; i < 20; i  ) {
            if (i < 9)                              //设置坦克出现的位置
                tc.tanks.add(new Tank(150   70 * i, 40, false,
                        Direction.RIGHT, tc));
            else if (i < 15)
                tc.tanks.add(new Tank(700, 140   50 * (i -6), false,
                        Direction.DOWN, tc));
            else
                tc.tanks.add(new Tank(10,  50 * (i - 12), false,
                        Direction.LEFT, tc));
        }
    }

    tc.homeTank = new Tank(300, 560, true, Direction.STOP, tc);//设置自己出现的位置

    if (!tc.home.isLive())  //将home重置生命
        tc.home.setLive(true);
    new TankClient(); //重新创建面板
}

// 新增方法:设置移动方向
private void setDirection(Direction dir) {
    switch (dir) {
        case RIGHT:
            bR = true;
            bL = false;
            bU = false;
            bD = false;
            break;
        case LEFT:
            bR = false;
            bL = true;
            bU = false;
            bD = false;
            break;
        case UP:
            bR = false;
            bL = false;
            bU = true;
            bD = false;
            break;
        case DOWN:
            bR = false;
            bL = false;
            bU = false;
            bD = true;
            break;
    }
}
3.3.5 帮你弄懂代码

在接手一个新java项目时,如果注释相对较少,我们可能不太容易明白一段代码的含义

通过腾讯云 AI 代码助手可以快速理解代码结构和功能,而且解释的十分通俗易懂,对于小白也很容易上手

我通过腾讯云 AI 代码助手来帮我梳理一下这个项目代码的功能

image-20240826011510210image-20240826011510210
代码语言:java复制
图像资源:项目中的bin/Images/目录包含了一系列的图像文件,这些文件可能代表游戏中的不同元素,如坦克、树木、河流等。
主类:Home.class可能是游戏的主界面或主控制类,而TankClient.class似乎是负责游戏逻辑和玩家交互的主要类。
键盘事件处理:
Tank.java文件中的keyPressed(KeyEvent e)方法处理键盘按下事件,根据不同的按键(上、下、左、右箭头键)来设置移动方向标志位(bL、bU、bR、bD)。
keyReleased(KeyEvent e)方法处理键盘释放事件,其中KeyEvent.VK_F键触发fire()方法,可能用于发射子弹。
移动方向决定:decideDirection()方法根据当前的移动方向标志位来确定坦克的实际移动方向。如果所有方向标志位都为假(即没有按键被按下),则坦克保持静止。
绘制和更新:虽然代码片段中没有直接提到绘制方法,但通常在Java的Swing或JavaFX等图形界面框架中,会有一个循环或定时器来定期调用repaint()方法,以更新屏幕上的图像。
游戏逻辑:项目中的其他类(如TankClient$1.class、Bullets.class、BombTank.class等)可能包含游戏的具体逻辑,如子弹的移动、碰撞检测、生命值的获取等。
文件结构:项目的目录结构表明它使用了IDE(如IntelliJ IDEA),并且有.iml文件,这是IDEA模块文件,用于存储模块的配置信息。
其他资源:src/Images/目录可能包含源代码级别的图像资源,而out/production/目录可能包含编译后的类文件和其他资源。
总结来说,这个项目是一个Java坦克战斗游戏,玩家通过键盘控制坦克移动和射击,游戏逻辑和界面更新在后台处理。
3.3.6 帮你写代码

前几个功能都是在辅助我们优化或者更改已经编辑的代码,那么腾讯云 AI 代码助手在生成代码方面的能力如何?

观察我们的项目架构

image-20240826011557336image-20240826011557336

基本上就是安装不同的功能分为不同的java类和函数,进行调用。现在我想要增加新的功能。例如游戏时间计算时间功能。当我结束一段游戏可以显示游戏时长。看一下生成的代码能否满足要求

发现腾讯云 AI 代码助手并不能在IDEA中直接为我们编写新文件,只能提供样例,最后的编写还需要我们手动完成

image-20240826011818020image-20240826011818020
代码语言:java复制
public class Weather {
    public enum WeatherType {
        SUNNY, RAINY, SNOWY
    }

    private WeatherType currentWeather;

    public Weather() {
        this.currentWeather = WeatherType.SUNNY; // 默认天气为晴天
    }

    public void changeWeather(WeatherType weather) {
        this.currentWeather = weather;
    }

    public void updateEnvironment(Graphics g) {
        switch (currentWeather) {
            case SUNNY:
                // 更新晴天时的环境
                break;
            case RAINY:
                // 更新雨天时的环境
                break;
            case SNOWY:
                // 更新雪天时的环境
                break;
        }
    }
}

最后测试,使用腾讯云 AI 代码助手优化完项目代码后,看一下能否正常执行

image-20240826012229374image-20240826012229374

4. 使用感受

4.1 整体感受

整体上在体验腾讯云 AI 代码助手后,上手很简单,功能各方面都很完善。对于在开发过程中编写代码或者生成测试案例都有很大的帮助。腾讯云 AI 代码助手把代码理解、生成、优化等能力无缝集成到研发流程的各个环节,就像助理一样,帮助提升代码开发质量和效率。对开发者的代码编写效率有十分明显的提升。

尤其是可以针对我们的特定文件,特定网页等信息来准确的生成更贴切实际的答案。

4.2 改进建议

  1. 提高代码生成效率

在使用腾讯云 AI 代码助手优化长代码时,尝试三次才执行成功,失败概率较大。且有时生成的代码和源代码没有发现区别

  1. 针对不同代码场景进行定制化优化

在使用腾讯云 AI 代码助手生成单测时,的确成功生成了,但单测并不能直接替换源代码,造成报错。并不是所有生成的代码都可以采纳就会替换源代码

  1. 代码风格统一性

在演示过程中我使用的代码都为java,但是腾讯云 AI 代码助手却生成了python代码,与要求不符

4.3 使用腾讯云 AI 代码助手会造成程序员失业吗

使用代码生成工具并不直接导致程序员失业,反而在多数情况下是提高了程序员的工作效率和项目的开发速度。这类工具可以帮助程序员自动生成标准化的代码片段、处理重复性高的任务、构建基础架构代码等,使得开发者能够更加专注于解决业务逻辑中的复杂问题、创新和优化系统设计。

所以我个人认为合理的使用腾讯云 AI 代码助手智能代码助手并不会造成失业,反而会提高我们的开发效率,不用重复造轮子浪费时间,把更多的精力用于提升代码结构和完整性。提高开发效率。

0 人点赞