前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1024程序员节|借势AI,写出牛码

1024程序员节|借势AI,写出牛码

原创
作者头像
六月的雨在Tencent
发布2024-10-27 17:43:55
790
发布2024-10-27 17:43:55
举报
文章被收录于专栏:创作是最好的自我投资

背景

最近适逢1024程序员节,各个社区也推出了一系列关于程序员的活动,那么最能提起程序员兴趣的莫过于 AI 代码助手了。对于程序员来说,如何提高开发效率,节省开发时长,从而为自己争取更多的工作之余提升自己的机会,一直是每一个程序员比较关注的问题。毕竟对于程序员这个行业,真的是科技变化日新月异,你一天不接触新东西,不学习新东西,那么你可能在未来的某一天就会面临突如其来的不知所措...正所谓:人无远虑,必有近忧 啊。

那么既然提到了AI代码助手,我们今天就来讲讲如何借助 AI代码助手,来写出既牛逼又高效的代码。

腾讯云 AI代码助手

为了提高程序员的开发效率,让程序员也可以体会一波AI 时代带来的福利,腾讯云基于混元代码大模型,自研了一款开发编程提效辅助工具,开发者可以通过插件的方式将 AI 代码助手安装到编辑器中辅助编程工作,这就是我们今天看到或者已经在体验的腾讯云 AI代码助手:https://cloud.tencent.com/product/acc?from_column=20421&from=20421

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

虽然 AI 代码助手目前还在公测期,但是对于常见的语言和框架基本都支持

所以说,不管你是什么开发语言,只要你想要提高开发效率,想要借势AI,写出牛码,那么你都可以来下载安装 AI代码助手插件,从而在开发中借助 AI代码助手大大提高开发效率和开发质量。说了这么多,还没说 AI代码助手插件怎么安装呢?我的错!下面开始,福利来袭...

插件安装

在插件安装之前,你首先需要确认你的开发工具IDE是否满足插件安装的基本要求,目前直接支持的IDE版本可以参考下图

对于目前开发工具IDE不支持的版本,个人建议你可以升级你的IDE开发工具版本。当然,如果你实在是不想升级开发工具版本,那么你也可以到插件市场去看是否有支持低版本的 AI代码助手插件,找到之后就可以参考官方文档的插件安装指南来操作了,文档地址:https://cloud.tencent.com/document/product/1749/105967 这里我就不再单独截图介绍如何安装 AI代码助手了,大家可以参考我给出的文档链接操作就可以,亲测操作有效且顺畅。

AI在手,写出牛码

AI代码助手插件安装完成之后,需要重启IDE开发工具,这里我的IDEA开发工具已经安装好了。安装好了之后点击【AI代码助手】图标,在弹出的侧边框中微信扫描二维码登录 AI代码助手

登录成功后,我们先来体验一个登录成功后页面的智能问答功能【正则表达验证身份证】,点击tab之后可以看到 AI代码助手已经为我们写好了正则

这样看,是不是很方便,解决了过去只能到浏览器搜索并且还需要自己判断是否正确的尴尬局面,提高搜索准度的同时,也从另一方面提高了开发效率。下面我就来逐步体验 AI代码助手的神级功能了。

代码补全功能

要说程序员用的 AI代码助手最常用的功能就是代码补全功能,比如说你现在需要写一个冒泡排序方法,那么你可以这样写一行注解

代码语言:java
复制
//写一个冒泡排序方法

直接 Tab 全部采纳后执行 main 函数查看输出结果

光标位置补全

当然,AI代码助手除了可以根据注释补全代码外,还可以在你当前定位的光标处精准补全代码,比如这里我需要在我光标定位到 (参数) 时,AI代码助手根据 方法名 selectTmUpgradeSupplementRecordById 分析出此处需要补全 获取 getId() 操作,Tab 确认

大括号位置补全

或者是当你在 if 条件判断后 输入大括号 换行后 自动为你补全 你想要处理的 supplementUserIds 参数,你可以通过快捷键 【逐行采纳】 或者 【按词采纳】 或者 【全部采纳】

其实,对于代码补全功能来说,并不是补全的内容越多越好(可能补全的越多,错得越多,而且速度也会变慢,补全内容的长度与补全所需要的时间成正比),在不同代码位置,补全的内容的多少(粒度)是不一样的。正如我们上面看到的一样,AI代码助手会根据上下文代码对所在 光标位置 或者 大括号后内容进行整体的精准补全,从而提高我们编码的效率。

业务代码块不全

当然,AI代码助手除了这样的代码不全外,还可以根据你的注释来补全业务代码,并且方法名的命名比你自己绞尽脑汁想出来的方法名还有业务意义,特别省心,就像这样,我输入注释,Enter 键换行

代码语言:java
复制
//查询 升级商品名称

AI代码助手会根据输入的注释自动生成相应的查询方法,特别省力,并且开发效率也大大提高了

总的来说,在开发中遇到需要代码补全的场景,你就放心的交给 AI代码助手,只要你给出的注释或者是你平常的开发习惯比较规范,那么你自己IDEA开发工具的 AI代码助手也会精准化的匹配你的习惯,生成的代码往往都是你乐意采纳并且丢弃率低的,这样就可以在AI时代下,写出既快又准确的牛码。

解释代码功能

对于程序员来说,理解自己的代码或者是理解别人的代码,往往都是费劲的,毕竟自己开发的代码,过了一段时间之后,可能也忘记代码的具体逻辑和功能了。那么这个时候让你来维护这段代码或者是优化这段业务逻辑,这就需要我们的 AI代码助手上阵了。比如我们可以直接选中需要解释的代码段,点击右键选择【解释代码】

可以看到 AI代码助手对于选中的代码片段按照功能模块进行了详细的解释,这样的话,在阅读别人的代码时就可以大大的提高工作效率了。或者你也可以直接选中代码后,在 AI代码助手页面点击 【/explain】同样可以看到解释代码的操作

代码修复和检查

同样的,AI代码助手也提供了代码修复和检查的功能,对于你选中的代码块,你可以选择【优化代码】,AI代码助手会对你选中的代码块进行详细的分析并提供优化方案

或者你也可以通过命令的方式对选中的代码块进行优化【/fix】

增加代码注释

对于没有代码注释的代码,为了方便后期的维护,你也可以直接选择需要增加代码注释的代码块,然后选择【补全注释】从而为当前的代码生成注释内容,提高代码的可阅读性

或者选中代码块后通过命令行的方式【/comments】来生成代码注释

技术对话功能

当然,如果这个时候你有一个新的需求来了,但是你又不想自己来写,那么你可以通过 AI代码助手的技术对话功能来实现,比如说这个时候需要添加一个通知功能,你就需要从建表到基础代码开发整个过程来实现,那么你就可以这样说

代码语言:java
复制
生成一个 表名是 t_notice 的表sql建表语句

这个时候AI 代码助手会根据表名生成一些 notice 表可能用到的字段

当然,只是生成一个表的sql 建表语句,基础的增删改查的代码还没实现呢,那么下面我们继续提问

代码语言:java
复制
基于以上t_notice 的表结构生成 java 对象类,Dao ,service,impl,controller 代码,包含增删改查功能

AI代码助手在收到命令后基于上面已经生成的 t_notice 的表结构开始生成我需要的一整套的基础代码了,下面我们来看一下生成的代码效果,下图是代码生成结束之后 AI代码助手给出的说明文字

说明文字中详细介绍了每个模块的功能作用,下面再来看看生成代码的准确度

实体类 Notice.java

代码语言:java
复制
public class Notice {
    private Long id;
    private String title;
    private String content;
    private Date publishDate;
    private String status;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getPublishDate() {
        return publishDate;
    }

    public void setPublishDate(Date publishDate) {
        this.publishDate = publishDate;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

Dao 接口 NoticeDao.java

代码语言:java
复制
import java.util.List;

public interface NoticeDao {
    void addNotice(Notice notice);
    void deleteNotice(Long id);
    void updateNotice(Notice notice);
    Notice getNoticeById(Long id);
    List<Notice> getAllNotices();
}

Dao 实现类 NoticeDaoImpl.java

代码语言:java
复制
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NoticeDaoImpl implements NoticeDao {
    private Map<Long, Notice> noticeMap = new HashMap<>();
    private Long nextId = 1L;

    @Override
    public void addNotice(Notice notice) {
        notice.setId(nextId++);
        noticeMap.put(notice.getId(), notice);
    }

    @Override
    public void deleteNotice(Long id) {
        noticeMap.remove(id);
    }

    @Override
    public void updateNotice(Notice notice) {
        if (noticeMap.containsKey(notice.getId())) {
            noticeMap.put(notice.getId(), notice);
        }
    }

    @Override
    public Notice getNoticeById(Long id) {
        return noticeMap.get(id);
    }

    @Override
    public List<Visitor> getAllNotices() {
        return new ArrayList<>(noticeMap.values());
    }
}

Service 接口 NoticeService.java

代码语言:java
复制
import java.util.List;

public interface NoticeService {
    void addNotice(Notice notice);
    void deleteNotice(Long id);
    void updateNotice(Notice notice);
    Notice getNoticeById(Long id);
    List<Notice> getAllNotices();
}

Service 实现类 NoticeServiceImpl.java

代码语言:java
复制
public class NoticeServiceImpl implements NoticeService {
    private NoticeDao noticeDao;

    public NoticeServiceImpl(NoticeDao noticeDao) {
        this.noticeDao = noticeDao;
    }

    @Override
    public void addNotice(Notice notice) {
        noticeDao.addNotice(notice);
    }

    @Override
    public void deleteNotice(Long id) {
        noticeDao.deleteNotice(id);
    }

    @Override
    public void updateNotice(Notice notice) {
        noticeDao.updateNotice(notice);
    }

    @Override
    public Notice getNoticeById(Long id) {
        return noticeDao.getNoticeById(id);
    }

    @Override
    public List<Notice> getAllNotices() {
        return noticeDao.getAllNotices();
    }
}

Controller 类 NoticeController.java

代码语言:java
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/notices")
public class NoticeController {
    private NoticeService noticeService;

    @Autowired
    public NoticeController(NoticeService noticeService) {
        this.noticeService = noticeService;
    }

    @PostMapping
    public void addNotice(@RequestBody Notice notice) {
        noticeService.addNotice(notice);
    }

    @DeleteMapping("/{id}")
    public void deleteNotice(@PathVariable Long id) {
        noticeService.deleteNotice(id);
    }

    @PutMapping
    public void updateNotice(@RequestBody Notice notice) {
        noticeService.updateNotice(notice);
    }

    @GetMapping("/{id}")
    public Notice getNoticeById(@PathVariable Long id) {
        return noticeService.getNoticeById(id);
    }

    @GetMapping
    public List<Notice> getAllNotices() {
        return noticeService.getAllNotices();
    }
}

到这里,AI代码助手生成的 t_notice的代码就都在这里了,整体上比较符合个人的需求,这样的话是不是大大提高了程序员的开发效率。如果没有AI代码助手辅助生成,程序员从设计表到基础功能模块的开发完,最少也需要4个小时。而有了AI代码助手之后,整个过程 40s不到。这样也就大大提升了程序员的开发效率。最后,AI代码助手还有辅助代码生成功能,就像是我们前面开始的,生成身份证的正则校验这样的效果。

业务代码辅助生成

比如说,这里我遇到一个问题,比如我现在用到@RequestMapping ,但是有些参数不经常用,我想了解一下这个注解还有哪些参数,以及这些参数该如何去用,我就可以这样问 AI代码助手

代码语言:java
复制
@RequestMapping 有哪些参数

AI代码助手会详细的介绍这个注解 @RequestMapping 的每一个参数的用法,详细还有举例的

再或者,我需要写一个校验邮箱的正则方法,那么我也可以让AI代码助手来帮我

代码语言:java
复制
帮我写一个 校验 邮箱格式的 Java 正则方法

AI代码助手很详尽的提供了 邮箱的正则表达式、校验邮箱格式是否正确的方法、测试邮箱校验方法的main 方法,特别贴心,效率还高

@workspace

这里看到 AI代码助手还有一个 @workspace 的功能,整体分析来看应该是可以介绍整个项目的整体功能,那么这里我也来体验一下,看是否分析的准确

代码语言:java
复制
@workspace 介绍一下项目功能

RAG知识库

在AI代码助手的命令框看到有一个【#】,这个RAG(Retrieval-Augmented Generation),是检索增强生成技术是,基于大语言模型的海量知识,还随时能接入专业打造的“百科全书”级知识库。这使得腾讯云 AI 代码助手在提供研发问答和智能编码服务时,更加精准、全面,有效避免了模型幻觉,助力开发者高效解决问题,提升编码效率。比如我现在选择【#】-【知识库】-【#Spring AI】

问一下这个问题

代码语言:java
复制
#Spring AI 什么样的框架是Spring AI框架

这里可以看到基于 Spring AI知识库介绍的Spring AI框架内容,内容很详细,

除了 Spring AI知识库,目前官方提供了以下知识库,感兴趣的小伙伴或者说有需要的小伙伴可以自己在开发的过程中大胆尝试

到这里,关于 AI代码助手的基本全部功能就都讲解完了,当然这只是个人版的内容,企业版的功能更强大哦,具体的版本介绍可以参考官方文档:https://cloud.tencent.com/document/product/1749/109769

关于AI代码助手

关于 AI代码助手,对于程序员来说,可以给予程序员的帮助与提升,正是文章标题中的 借势AI,写出牛码。在上面的 AI代码助手上手实测中,我测试的都是我日常工作常用到的场景,而这些场景下的 AI代码助手表现都足够让我满意。对于我来说,AI代码助手带给我的帮助与提升,可以说工作效率提高了,编码速度提高了,代码健壮性更好了,系统更稳定了。并且 AI代码助手的技术对话功能,还可以让我在工作之余可以很轻便的获取想要的知识或者是加深对知识点的理解。在不切换电脑界面,左边 日常代码开发, 右边 日常知识点学习

顺势、借势

AI的出现,带来了各行各业被取代的风险,那么AI代码助手的出现,也同样给程序员行业带来了被取代的风险。面对这样的情况,有的程序员甚至开始抵触AI的发展,但是时代的发展往往不是个人或者一个团体所能阻挡的。那么在这种情况下,作为程序员,我们首先要做的就是顺应时代的潮流,既然AI之势势不可挡,那么我们更应该顺势而为,不断的补充学习新知识,从而增强自身。就像你用AI代码助手提高开发效率一样,你不是向AI时代低头了,而是你学会了借势,借势AI来提高自己的工作效率,来提高自己的核心竞争力了。

因此说,AI时代下,借势AI,让我们每一个程序员都可以写出牛码,屹立于时代洪流...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 腾讯云 AI代码助手
  • 插件安装
  • AI在手,写出牛码
    • 代码补全功能
      • 光标位置补全
      • 大括号位置补全
      • 业务代码块不全
    • 解释代码功能
      • 代码修复和检查
        • 增加代码注释
          • 技术对话功能
            • 业务代码辅助生成
              • @workspace
                • RAG知识库
                • 关于AI代码助手
                • 顺势、借势
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档