Pursuit
发布于 2023-11-28 / 17 阅读
0
0

coder最好的副驾驶-github copilot体验

GitHub Copilot介绍

GitHub Copilot是一种基于人工智能的编程辅助工具,它使用了先进的机器学习技术,可以自动生成Java代码片段和函数等。只需要输入几个关键字或者一些自然语言描述,Copilot就会根据上下文和语言语法规则,自动生成可用的Java代码,减少了程序员在编写代码时的重复性劳动和错误。

GitHub Copilot集成IDE

1.准备github copilot账号

安装插件之前,我们需要确保已经拥有GitHub账户并通过认证。

2021年6月29日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot, 此时申请内测后就可免费试用。

2022年6月22日,Copilot正式上线,定价每月 10 美元(约 66.9 元人民币)或每年 100 美元(约 669 元人民币),对学生用户和流行开源项目的维护者免费提供。

在2023年的今天, 如果我们想体验一下, 又觉得费用过高, 我们可以有以下三条途径:

1.如果你是学生, 你可以直接进行学生认证, 即可免费使用。

2.加入某个大型开源项目, 并作出贡献, 之后可以向github申请免费使用。

3.以上两条都不满足, 可以上咸鱼搜索:github学生包, 费用大概一年30左右。

如果条件允许, 还是请支持正版。

2. 安装GitHub Copilot插件

首先,我们需要在我们的集成开发环境(IDE)中安装GitHub Copilot插件。目前,GitHub Copilot已支持IntelliJ IDEA、

Visual Studio Code、PyCharm等主流IDE,我们可以根据自己的需求选择相应的IDE。安装过程可能因IDE而异,但是都大同小异。

拿IDEA举例, 可以按照以下步骤进行安装:

1. 打开 IDEA,选择 "File" -> "Settings" -> "Plugins"-> marketplace。

2. 在右侧的搜索框中输入 "GitHub Copilot",然后点击 "搜索"。

3. 在搜索结果中找到 "GitHub Copilot" 插件,点击 "Install"。

4. 安装完成后,重启 IDEA, 即可在Tools里看到对应的github copilot

5. 此时还无法使用,因为需要关联到你的github账号。点击Tools->GitHub Copilot ->Login to GitHub

6. 输入你的 GitHub 用户名和密码,或者使用 Personal Access Token 进行身份验证。

7. 接下来,你可以在IDEA中尝试使用 GitHub Copilot 自动生成代码。

GitHub Copilot: 让Java编程更高效

下面是一些使用GitHub Copilot的示例,演示如何使用它来简化Java代码编写。

1.自动补全方法和类名

在编写Java代码时,经常需要使用一些库和方法。在输入方法和类名时,Copilot会自动补全并显示该类和方法的参数和返回类型。这可以大大加快代码编写的速度。

例如,当你输入“List”时,Copilot会自动提示你创建List类,并提供添加、删除、遍历等方法,
从而帮助你更快速地编写代码。

List示例.gif

2.自动生成Java表达式

在编写Java代码时,需要使用大量的表达式。Copilot可以根据上下文自动生成Java表达式,从而减少你的工作量。只需输入
几个关键字,Copilot就会自动推断并生成一个可用的Java表达式。

例如,当你输入“if”时,Copilot会自动生成一个可用的Java表达式。这可以帮助你时间和精力,并减少编写错误的机会。

表达式示例.gif

3.生成Java Lambda表达式

在Java 8之后,Lambda表达式成为了Java编程的重要组成部分。使用GitHub Copilot,你快速生成Java Lambda表达式。

只需输入一段注释来表述生成的规则,Copilot就会自动生成一个Lambda表达式。

lambda表达式示例.gif

4.根据注释生成我们需要的方法

GitHub Copilot的一个特别之处在于它可以根据用户提供的注释生成代码。当你在编辑器中键入注释时,Copilot会根据注释提供代码建议,并将生成的代码直接插入到编辑器中。

例如,如果你在注释中写下“将CST格式时间转化为yyyy-MM-dd HH:mm:ss格式”,Copilot将生成一个执行这个操作的函数,
并将其插入到你的代码中。

时间处理.gif

获取指定日期的下一个工作日方法.gif

5.解决算法难题以及学习算法

GitHub Copilot可以根据你输入的信息,给出一些算法建议。这些建议可能会提高你的工作效率,尤其是在解决一些相对简单的问题时。

例如, 你可以通过输入注释"写一个01背包算法"来让它为你生成代码片段.

01背包算法.gif

你也可以直接指定某种算法来让GitHub Copilot来为你处理一些简单的问题。

例如, 当你输入"用二分法从一大串字符串中查找某一个字符", 他会为你生成对应的代码.

二分算法查找字符串.gif

在解决算法难题时,最重要的是理解问题的本质,并设计出高效、正确的算法。虽然GitHub Copilot可以提供一些有用的代码片段,但仍需要程序员自己进行算法设计和分析。

此外,算法问题的解决涉及到更广泛的问题,包括算法的正确性、时间复杂度和空间复杂度等。GitHub Copilot并不能解决
这些问题,因此仍需要程序员进行仔细的分析和评估。

因此,虽然GitHub Copilot可以提供一些帮助,但仍需要程序员自己进行算法设计和分析,以便找到最优解。

6.根据上下文给出智能建议

随着使用时间的递增,你会发现GitHub Copilot会优先建议你写过的重复性代码逻辑,它可以深入了解你的项目上下文,为你提供最合适的建议。

例如, 当你在写代码的时候, 打出"finally", GitHub Copilot根据你之前写的部分代码直接生成你想要的关闭流的代码。

上下文给出建议.gif

7.借助上下文分组

在 Copilot 中,你可以使用上下文分组来帮助它更准确地生成代码。例如,如果你正在编写一个使用数据库的应用程序,你可以将你的代码分为不同的组,例如“连接到数据库”、“查询数据”和“关闭连接”。这样,当你在某个组中编写代码时,Copilot 就会考虑该组中已有的代码,以更准确地生成代码。例如:

// 连接到数据库
Connection conn = DriverManager.getConnection(url, username, password);

// 查询数据
String sql = "SELECT * FROM my_table";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

// 关闭连接
rs.close();
stmt.close();
conn.close();

然后,当您在“查询数据”组中编写代码时,Copilot 就会考虑连接到数据库和关闭连接的代码,以更准确地生成代码。

8.代码优化

copilot对于简单函数可以做到一定程度的优化,而对于复杂函数不能保证结果一致。
代码优化.gif

9.生成单元测试

copilot可以对一些简单的函数生成单元测试

单元测试.gif

它还可以根据我们的方法名称自动生成对应的方法体, 同时生成好对应的单元测试用例

单元测试2.gif

10.生成实体类

1. 根据提供的JSON串生成对应的实体类

新建一个实体类,在头部位置添加描述信息,然后回车补全。

如果将描述放到类的内部,也可以生成,但会是一行一行来生成。但是如果描述下方添加内部类的代码,则是可以一次生成的。

JSON生成实体类.gif

2. 根据SQL语句来生成对应的实体类

以数据库相关信息生成, 支持插入语句和建表语句。

SQL生成实体类.gif

GitHub Copilot: 使用小Demo

Demo1:

需求:

开发一个读取并打印CSV 文件的 Java 应用程序。

完成这个需求, 创建好JAVA实体类后,仅仅只需要2个命令。

1.读取CSV文件, 并将数据存储在map列表中。

2.打印CSV文件中的数据。

读取csv文件.gif

打印csv文件.gif

小结:

从我开始创建实体类开始, 到我完成这个需求, 我一共花了13分钟左右。

其中大概有5分钟的时间, 我花在了找CsvReader的依赖Jar包, 并将Jar包依赖进项目中。
大概有3分钟花费在刷新项目Maven依赖上。
还有5分钟我在Code Review, 来确保生成的代码是正确。

程序运行结果:

image.png

Demo2:

需求升级:

开发一个从URL下载CSV 文件, 同时读取并打印文件内容的 Java 应用程序。

这次仅仅需要一个命令即可完成:

1.从指定URL下载CSV文件, 读取文件内容存储在map列表中。

2.从右侧的多个建议中, 选取一个我们需要的建议。

Snipaste_2023-04-11_16-46-49.png

下载打印csv文件.gif

小结:

这次更快, 由于之前已经做好了Jar包导入, 这次不需要重复导入。

完成这个需求, 我一共花费了5分钟左右。

其中, 有2分钟的时间, 我是在右侧挑选合适的代码建议。

而且可以看到, 这次只输入了一条命令。

打印那条命令, 由于Copilot学习了Demo1的代码, Copilot会自动帮我们生成出来。

这个特性会导致一个结果:

即, 随着代码的越写越多, 你会发现Copilot用起来会越来越顺手。

这次生成的代码和刚刚Demo1对比, 非常相似, 主要有2处不同。

1.函数入参由文件路径变更为下载URL。

image.png

2.文件来源由读取文件路径, 变更为从URL下载文件流, 并用文件流生成CsvReader对象。

image.png

符合我们的预期。

争议

Copilot具有很多优点,但它也面临着一些争议,其中一些包括:

1.代码生成的准确性问题:由于Copilot是基于机器学习技术的,它可能会生成不准确或不完整的代码。这可能导致安全问题或功能缺陷。

2.版权问题:Copilot可以通过生成与其他人的代码相似的代码来侵犯版权。这使得一些人担心Copilot可能会导致知识产权的问题。

3.缺乏透明度:Copilot使用的机器学习模型是封闭的,没有公开的源代码,这意味着没有人知道它的内部工作原理。这可能导致缺乏透明度和可验证性。

4.工具的发展方向:Copilot是由GitHub和OpenAI共同开发的,它们的发展方向可能会受到商业利益和技术路线等因素的影响。这可能会导致Copilot的未来发展方向存在一定的不确定性。

总结

GitHub Copilot经过海量代码资源库进行学习训练,结合你当前编码环境上下文, 给到你的即时建议通常会按照你的预期运行, 能够让你在使用过程中产生一种越用越懂你的感觉, 会让你写代码产生一种酣畅淋漓的快感。

总之,GitHub Copilot是一个有用的编程辅助工具,可以加速代码开发,提高生产效率。在使用它时,需要理解其局限性并保持警惕,以确保代码质量和安全性。


评论