让 AI 为你写代码 - 体验 Github Copilot

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

申请

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

安装插件

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

开始体验

安装完插件后就可以开始体验了。使用其实来也非常简单,你只需要写下注释比如 // 比较两个数的大小 ,然后回车,稍等一会就 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 代替,程序员的入门门槛进一步降低,这到底是好事还是坏事呢?

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

87067623e11cb6fed175fcc5ff44fb8a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax常见错误和使用总结

先给出标准的js时间ajax <script type"txt/javascript">//1、在IE中实例化Msxml2.XMLHTTP对象 Msxml2.XMLHTTP是IE浏览器的内置对象&#xff0c;该对象具有异步提交数据和获取结果的功能var xmlHttpfalse; function initAJAX() {if(window.XMLHttpRequset){x…

这个24岁北航博士刚毕业就受聘211大学副教授,他大一就保研,学术能力太牛了.........

全世界只有3.14 % 的人关注了爆炸吧知识本文综合整理自&#xff1a;量子位、微言航语近日&#xff0c;有一个人的“朋友圈”在朋友圈火了。别误会&#xff0c;超模君可没在玩套娃游戏。截图给大家搬来了&#xff0c;快看你没看错&#xff01;1996年出生&#xff0c;今年24岁&am…

正则 js截取时间

项目中要把时间截取&#xff0c;只要年月日&#xff0c;不要时分秒&#xff0c;于是 /\d{4}-\d{1,2}-\d{1,2}/g.exec("2012-6-18 00:00:00")或者另一种 var date "2015-12-26 15:22:00"; console.log(date.replace(/\s[\x00-\xff]*/g,));解析 思路:获取到…

数据中心缩小是因为外包和云计算吗

一些IT专家预测&#xff1a;在云计算和数据中心外包时代&#xff0c;将会有越来越多的企业看不到建造和管理数据中心的价值。 “建造数据中心是一笔大的支出&#xff0c;你得考虑到能量、发电、UPS、机架等等&#xff0c;这还没讲到服务器呢&#xff0c;”架构师Tim Antonowicz…

英特尔傲腾内存linux,英特尔傲腾内存怎么样?intel傲腾内存优点和缺点你知道吗?...

英特尔傲腾内存在前一段时间正是发布&#xff0c;对于英特尔内存的性能不少用户一无所知&#xff0c;那么英特尔傲腾内存怎么样&#xff1f;都有哪些优点和缺点&#xff1f;下面装机之家小编来为大家解读下。优点1&#xff1a;3D XPoint随机读取性能强傲腾使用了不同于普通固态…

零代码平台中的服务编排思路

先打个广告&#xff0c;我们的第三场零代码实践的直播在本周五&#xff08; 11 月 5 日 &#xff09;晚8点准时开始&#xff0c;扫描下面二维码&#xff0c;直接预约直播&#xff0c;到时间微信会自动提醒。随着企业数字化转型的进程加快&#xff0c;零代码平台的的应用越来越广…

webservice发布

一朋友问我webservice怎么发布在iis上。我之前也不知道&#xff0c;今天自己亲自试了一把竟然发布成功了。现在这个分享给大家。希望给大家带来一点点方便。 其实和发布普通网站一样&#xff0c;在iis上选择 默认网站--->新建虚拟目录--->取别名&#xff08;随便取&#…

自己平时长期积累的java资料可供大家学习

java 中数据转换 1、如何将字符串String转化为整数int int i Integer.parseInt(str); int i Integer.valueOf(my_str).intValue(); 注: 字串转成Double, Float, Long的方法大同小异。 2、如何将字符串String转化为Integer Integer integerInteger.valueOf(i) 3、…

日本原装进口雪平锅,1台顶4台,有它谁还点外卖?

▲ 点击查看小爆我虽然热爱烹饪&#xff0c;但不得不说「下厨房」&#xff0c;也是个坑。光是锅&#xff0c;我就要买好几个。为了蒸包子馒头买蒸锅&#xff0c;为了炒菜买炒锅&#xff0c;偶尔想精致喝热牛奶又买了小奶锅&#xff0c;为了煲汤、做点卤味解解馋&#xff0c;买炖…

NSPredicate 谓词

比较运算符/**比较运算符 * >:大于 * <:小于 * >:大于等于 * <:小于等于 * ,:等于 * !,<>:不等于 * between:左边的表达式等于右边的表达式的值或者介于它们之间。右边是一个有两个指定上限和下限的数值的数…

如何评价一个开源项目——价值流网络

本文由X-lab开放实验室博士生赵生宇原创出品该篇博客继续之前关于活跃度和协作影响力的介绍继续展开&#xff0c;希望可以在解决协作影响力无法容纳更多数据&#xff0c;从而可以更全面衡量开源生态的同时&#xff0c;也引入一种高可扩展的数学模型&#xff0c;可以在任意时间快…

linux7为nginx添加服务,CentOS7添加Nginx为系统服务

1.编辑系统服务vim /usr/lib/systemd/system/nginx.service[unit]DescriptionWeb ServiceAfternetwork.target[Service]PIDFile/var/run/nginx.pidExecStart/usr/local/nginx/sbin/nginxExecStop/usr/local/nginx/sbin/nginx -s stopExecReload/usr/local/nginx/sbin/nginx -s …

Linux内核升级,从2.6.18升级到3.2.14

今日在centos上安装jsp环境&#xff0c;即&#xff08;Nginxjdkmysqltomcat&#xff09;发现nginx启动后无法访问&#xff0c;于是查看日志&#xff0c;log如下 [rootAY12122501352213a7156 ~]# cat /var/log/nginx/error.log 2013/01/12 16:29:43 [emerg] 32055#0: eventfd() …

【翻译】C#编程语言和JAVA编程语言的比较(下)

原文地址&#xff1a;http://www.25hoursaday.com/CsharpVsJava.html 6、集合 许多有名的编程语言都会包含一个集合框架&#xff0c;框架一般由各种用于保存数据的数据结构和配套的操作对象的算法构成。集合框架的优势是让开发者可以不用写数据结构和排序算法&#xff0c;把精力…

数据库平时错误和使用经验的总结

jdbc里面的操作 jdbc&#xff0c;使用PreparedStatement view sourceprint?001 package com.iflytek.test; 002 003 import java.sql.Connection; 004 import java.sql.DriverManager; 005 import java.sql.PreparedStatement; 006 import java.sql.ResultSet; …

Haproxy 让后端RS记录真实IP

#让RS记录客户端的真实IP#1.先在haproxy.cfg中加入下面参数。listen www ... option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数&#xff0c;必须要放在listen模块下#2.如果是apache&#xff0c;则加入下面参数LogFormat “\”%{X-Forward…

物理太难?这些虚拟动图,让你看懂物理

全世界只有3.14 % 的人关注了爆炸吧知识&#xff08;刻度尺的使用&#xff09;&#xff08;测量平均速度实验&#xff09;&#xff08;声音的产生&#xff09;&#xff08;温度计的使用&#xff09;&#xff08;晶体和非晶体的熔化&#xff09;&#xff08;光的反射&#xff09…

linux http 分析工具,技术|httpstat:一个检查网站性能的 curl 统计分析工具

httpstat 是一个 Python 脚本&#xff0c;它以美妙妥善的方式反映了 curl 统计分析&#xff0c;它是一个单一脚本&#xff0c;兼容 Python 3 &#xff0c;在用户的系统上不需要安装额外的软件(依赖)。从本质上来说它是一个 cURL 工具的封装&#xff0c;意味着你可以在 URL 后使…

微软 Ignite 大会 PowerBI 划重点

2021 年 11 月 2 日&#xff0c;微软举办 Ignite 大会&#xff0c;其中关于 Power BI 有哪些重点&#xff0c;带给你了解。摘要Power BI 和 Power Point 将原生整合。Power BI 和 Teams 将更深入整合。Power BI 云端数据集推出自动聚合。Power BI 数据模型推出混合表。Power BI…

周报_2013第03周(2013/01/13-2013/01/19)

2013.01.14 Winform .Net FrameWork 3.5 支持 Client Application Service&#xff08;ASP.NET service: login authentication、roles、profile settings&#xff09;&#xff0c;.Net FrameWork 4.0 不支持。转载于:https://www.cnblogs.com/DancingFish/archive/2013/01/14/…