前几天在群里看到有大神分享 Copoilot AI 写代码,看了几个截图有点不敢相信自己的眼睛。今天赶紧自己也来体验一下 Copoilot AI 写代码到底有多神奇。

申请

现在 Copoilot 还处在预览阶段,想要体验需要先申请。等待大概一晚会收到邮件提示申请试用成功,然后就可以安装 copilot 的插件进行体验了。
申请的地址为 https://copilot.github.com/ 。

安装插件

打开 VSCode 的扩展面板,搜 copilot 找到插件点击安装。
安装完成后会提示你需要登录 github 进行授权。这一步在国内可能会校验失败,多尝试几次就会成功。

开始体验

安装完插件后就可以开始体验了。使用其实来也非常简单,你只需要写下注释比如 // 比较两个数的大小 ,然后回车,稍等一会就 copilot 就会把建议代码给列出来。或者直接写下方法名,比如 function compareDate () { 写下第一个 { 的时候按下回车,稍等一会 copilot 就会给出建议代码,按一次 tab 就会生成代码。
copilot 可能会给出多种建议的代码,使用 alt + [ 或者 alt + ] 可以进行切换。
下面让我们来测试一下 copilot 生成的代码到底怎么样。

测试JavaScript

新建一个名为 copilottest.js 的文件。
先来一个简单的,实现一个快速排序,这种标准的算法生成起来应该没啥难度。直接 // 快排 回车就生成出来了,看了下代码,还不错哈。

//快排
function quickSort(arr, left, right) {if (left < right) {var pivotIndex = partition(arr, left, right);quickSort(arr, left, pivotIndex - 1);quickSort(arr, pivotIndex + 1, right);}
}

再来一个比较常用的字符串转时间,并且顺便生成一个测试方法。

//把格式为"yyyy-MM-dd"的字符串转换为Date类型
function stringToDate(str) {var date = eval('new Date(' + str.replace(/\d+(?=-[^-]+$)/,function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');return date;
}
//测试 stringToDate 方法是否正确
function testStringToDate() {var str = "2017-01-01";var date = stringToDate(str);alert(date);
}

再来带判断逻辑的:比较两个数字,如果第一个数字大于第二个数字,则返回“微信”否则返回"qq"。
这个考验一下 copilot 对中文的理解。

//比较两个数字,如果第一个数字大于第二个数字,则返回“微信”否则返回“qq
function compare(num1, num2) {if (num1 > num2) {return "微信";} else {return "qq";}
}

再来一个判断时间是星期几的函数

//根据时间判断星期几
function getWeek(date) {var week;switch (date.getDay()) {case 0:week = "星期日";break;case 1:week = "星期一";break;case 2:week = "星期二";break;case 3:week = "星期三";break;case 4:week = "星期四";break;case 5:week = "星期五";break;case 6:week = "星期六";break;}return week;
}

再来试试 http 请求写的怎么样,访问一下百度把html返回。

//返回baidu.com的html
function getBaiduHtml() {var url = "http://www.baidu.com";var xhr = new XMLHttpRequest();xhr.open("GET", url, false);xhr.send();var html = xhr.responseText;return html;
}

JavaScript 操作 html 也很常见,那么试试查找元素怎么样

//查找页面上所有的div
function findAllDiv() {var divs = document.getElementsByTagName("div");return divs;
}//查找所有页面上class=user的input元素
function findAllUserInput() {var inputs = document.getElementsByClassName("user");return inputs;
}

再来试试 http 提交对象怎么样

//请求一个url,post一个json对象
function postJson(url, json) {var xhr = new XMLHttpRequest();xhr.open("POST", url, false);xhr.setRequestHeader("Content-Type", "application/json");xhr.send(JSON.stringify(json));var response = xhr.responseText;return response;
}

来个有点难度的,爬取博客园首页的文章的标题

//爬取cnblogs.com所有文章的标题
function getAllArticleTitle() {var url = "http://www.cnblogs.com/";var xhr = new XMLHttpRequest();xhr.open("GET", url, false);xhr.send();var html = xhr.responseText;var reg = /<a href="(.*?)" target="_blank">(.*?)<\/a>/g;var result = html.match(reg);return result;
}

测试一下使用某个类库来完成一些操作

// 使用hls.js播放视频
function playVideo(video) {var hls = new Hls();hls.loadSource("http://www.w3school.com.cn/i/movie.mp4");hls.attachMedia(video);hls.on(Hls.Events.MANIFEST_PARSED, function () {video.play();});
}

看到这里有没有被震惊到?以上代码全部是 copilot 自动生成的,我仅仅是写下了几行注释。可以看到注释其实写的也很简单,copilot 生成的代码基本上都符合注释的内容,可以说 copilot 对中文注释的理解非常到位。如果你的注释写的更加详细,那么代码就会更加符合你的要求。

测试.NET C#

让我们在来试试 C# 代码的提示功能怎么样。新建一个文件名为 copilottest.cs 的文件。
先来一个简单的,比较两个时间的大小。

//比较两个时间的大小public static bool CompareTime(string time1, string time2) {DateTime dt1 = DateTime.Parse(time1);DateTime dt2 = DateTime.Parse(time2);if (dt1 > dt2) {return true;} else {return false;}}

做为 CRUD boy 自然要测试下数据库操作。
先来试试使用EF来查找用户

//使用EF查询用户public static List<User> GetUserList() {using (var db = new CopiloteContext()) {return db.User.ToList();}}

再来试试使用 dapper 的写法

//使用dapper查询用户    public static List<User> GetUserListDapper() {using (IDbConnection db = new SqlConnection("server=.;database=copilote;uid=sa;pwd=123456")) {return db.Query<User>("select * from user").ToList();}}

让我们加大难度,来个连接跟分组统计人数

//查询2020年每个班级学生的人数public static void GetClassStudentCount() {using (IDbConnection db = new SqlConnection("server=.;database=copilote;uid=sa;pwd=123456")) {db.Query<ClassStudentCount>("select class.name as classname,count(student.id) as studentcount from student left join class on student.classid=class.id where class.year=2020 group by class.name").ToList();}}

让它自动生成改删查操作

class student {public int id { get; set; }public string name { get; set; }public int classid { get; set; }}//student的新增操作public static void AddStudent(student s) {using (IDbConnection db = new SqlConnection("server=.;database=copilote;uid=sa;pwd=123456")) {db.Execute("insert into student(name,classid) values(@name,@classid)", s);}}//student的更新操作public static void UpdateStudent(student s) {using (IDbConnection db = new SqlConnection("server=.;database=copilote;uid=sa;pwd=123456")) {db.Execute("update student set name=@name,classid=@classid where id=@id", s);}}//student的删除操作public static void DeleteStudent(int id) {using (IDbConnection db = new SqlConnection("server=.;database=copilote;uid=sa;pwd=123456")) {db.Execute("delete from student where id=@id", new { id = id });}}

再来试试生成 ASP.NET MVC 的 action 方法。

class UserController : Controller {//从 request 获取 name 参数查询用户,如果查到就返回否则返回状态404public ActionResult GetUser(string name) {User user = UserService.GetUser(name);if (user != null) {return Json(user);} else {return HttpNotFound();}}//使用[FromBody]映射成user对象,并保存到数据库public ActionResult AddUser([FromBody]User user) {UserService.AddUser(user);return Json(user);}
}

其实我还试验了一下 JAVA 的代码,也是毫无压力,这里就不贴出来了。

总结

到这里我已经有点无话可说了。copilot 深深的震撼了我,感觉 copilot 对注释的理解根据人类无差别,生成的代码基本是符合要求的,即使有一点问题那也是因为没有上下文的原因, copilot 只能生成最常用的语句。copilot 虽然只是生成一个个短小的函数,但是再复杂的系统不都是由无数个简单的函数组成的吗?况且 copilot 还只是预览版,如果再迭代几个版本,AI 再训练几年那么是不是可以有无限可能。到这里心里略有一点忧伤,以后一些低级代码工作很可能被 AI 代替,程序员的入门门槛进一步降低,这到底是好事还是坏事呢?

关注我的公众号一起玩转技术

让 AI 为你写代码 - 体验 Github Copilot相关推荐

  1. Tab 编程,Copilot 让你彻底解放双手,AI 帮你写代码。

    GitHub Copilot 是 GitHub 和 OpenAI 开发的 AI 代码工具,用户在使用 Visual Studio Code 或 Jetbrains 编辑器时可以通过 GitHub Co ...

  2. 15个借助AI,ChatGPT自动写代码工具

    整理了15个借助AI和ChatGPT辅助我们自动写代码的工具,整理到 15个借助AI,ChatGPT自动写代码工具http://www.webhub123.com/#/home/detail?proj ...

  3. 说出你的需求,我们AI给你写代码 | MIT新研究

    乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 说你想干什么,AI就能自动写代码. 现在,我们离这个目标又近了一步. 近日,MIT的一个研究团队放出了新的研究成果. 他们提出了一种灵活组合 ...

  4. AI 可以自己写代码了,对程序员来说是个好消息吗?

    一项名为 Codex 的新技术生成 12 种编码语言的程序,甚至可以在它们之间进行翻译. 但这对资深程序员来说并不构成威胁. 汤姆史密斯一接触到 Codex一种新的人工智能技术,可以编写自己的计算机程 ...

  5. 成熟的AI应该自己写代码,IBM发布5亿行代码数据集,包含55种语言|开源

    转载自:量子位 在ImageNet频频出现在计算机视觉研究的今天,IBM也为智能编码(AI for Code)带来了它的专属数据集--CodeNet. 1400万个编程项目,5亿行代码,超过55种的不 ...

  6. python在哪里写代码比较适合-AI辅助写代码,Python之父都爱不释手的工具

    我刚看到这个工具的时候,也是一脸懵x,AI?机器学习?辅助?如果能全自动写出代码得多好,不过真要是这样,在座各位的就业危机就彻底来了. 言归正传,这个工具是-- kite 这是一款IDE插件,使用机器 ...

  7. 全球最常用密码名单公布:“123456”排第二;谷歌神秘项目曝光:AI写代码,抢程序员饭碗;WSL GA发布|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. 谷歌神秘项目曝光!能写代码还会改bug的AI,让码农瑟瑟发抖

    [导读]谷歌神秘项目Pitchfork曝光!这次,会有多少码农被迭代? 做一个程序员,压力有多大? 反正,最近的一个传闻,是让码农们瑟瑟发抖. 传说谷歌正在研发一个秘密的新项目,教AI写代码. 据说, ...

  9. 和AI结对编程!OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

    作者 | 琰琰.青暮 比GPT-3更强大! 昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下 ...

最新文章

  1. linux kill命令信号,linux kill命令详解
  2. 你不得不看的六篇知识图谱落地好文
  3. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
  4. 关于使用Transaction对于非数据库事务的操作
  5. Nagios_在不同平台下的安装
  6. python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
  7. java的字符定义_Java字符串定义及常用方法
  8. 【Android架构GPS篇】之GPS定位应用层流程
  9. 符合c语言语法规定的表达式,若变量定义为int fahr;,则5(fahr-32)/9是符合C语言语法的表达式...
  10. 百度云下载插件,创建链接,脚本管理,百度网盘快速下载
  11. GAN详解与PyTorch MINIST手写数字生成实战
  12. 思科 配置标准ACL
  13. NS,DNS和A记录 之间关系
  14. 网络拓扑图:网络拓扑图介绍及在线制作
  15. 关于qcom camera cpp driver 的buf分析笔记(msm8996)
  16. 2019年8月21日 星期三(韩天峰的个人简历)
  17. 合影效果java_排序入门练习题9 合影效果 题解
  18. 在php中如何打印粗体字,ps文字加粗在哪里
  19. linux 运维工程师的前景怎么样?
  20. 小米刷 android o,一代神机!五年前的小米2刷入Android 8.0原生系统

热门文章

  1. VMware虚拟机中CentOS网络设置
  2. android:自己实现能播放网络视频url的播放器
  3. JavaScript之闭包
  4. Filebeat占用内存和CPU过高问题排查
  5. 设置第三方的SMTP服务
  6. Android深度探索(卷1)HAL与驱动开发第六章总结
  7. 巴巴运动网学习笔记(16-20)
  8. 理解T-SQL: 脚本和批处理
  9. Teams Bot开发系列:初识Bot
  10. ubuntu 任务栏监视器_从系统任务栏监视Google服务