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类,并提供添加、删除、遍历等方法,
从而帮助你更快速地编写代码。
2.自动生成Java表达式
在编写Java代码时,需要使用大量的表达式。Copilot可以根据上下文自动生成Java表达式,从而减少你的工作量。只需输入
几个关键字,Copilot就会自动推断并生成一个可用的Java表达式。
例如,当你输入“if”时,Copilot会自动生成一个可用的Java表达式。这可以帮助你时间和精力,并减少编写错误的机会。
3.生成Java Lambda表达式
在Java 8之后,Lambda表达式成为了Java编程的重要组成部分。使用GitHub Copilot,你快速生成Java Lambda表达式。
只需输入一段注释来表述生成的规则,Copilot就会自动生成一个Lambda表达式。
4.根据注释生成我们需要的方法
GitHub Copilot的一个特别之处在于它可以根据用户提供的注释生成代码。当你在编辑器中键入注释时,Copilot会根据注释提供代码建议,并将生成的代码直接插入到编辑器中。
例如,如果你在注释中写下“将CST格式时间转化为yyyy-MM-dd HH:mm:ss格式”,Copilot将生成一个执行这个操作的函数,
并将其插入到你的代码中。
5.解决算法难题以及学习算法
GitHub Copilot可以根据你输入的信息,给出一些算法建议。这些建议可能会提高你的工作效率,尤其是在解决一些相对简单的问题时。
例如, 你可以通过输入注释"写一个01背包算法"来让它为你生成代码片段.
你也可以直接指定某种算法来让GitHub Copilot来为你处理一些简单的问题。
例如, 当你输入"用二分法从一大串字符串中查找某一个字符", 他会为你生成对应的代码.
在解决算法难题时,最重要的是理解问题的本质,并设计出高效、正确的算法。虽然GitHub Copilot可以提供一些有用的代码片段,但仍需要程序员自己进行算法设计和分析。
此外,算法问题的解决涉及到更广泛的问题,包括算法的正确性、时间复杂度和空间复杂度等。GitHub Copilot并不能解决
这些问题,因此仍需要程序员进行仔细的分析和评估。
因此,虽然GitHub Copilot可以提供一些帮助,但仍需要程序员自己进行算法设计和分析,以便找到最优解。
6.根据上下文给出智能建议
随着使用时间的递增,你会发现GitHub Copilot会优先建议你写过的重复性代码逻辑,它可以深入了解你的项目上下文,为你提供最合适的建议。
例如, 当你在写代码的时候, 打出"finally", GitHub Copilot根据你之前写的部分代码直接生成你想要的关闭流的代码。
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对于简单函数可以做到一定程度的优化,而对于复杂函数不能保证结果一致。
9.生成单元测试
copilot可以对一些简单的函数生成单元测试
它还可以根据我们的方法名称自动生成对应的方法体, 同时生成好对应的单元测试用例
10.生成实体类
1. 根据提供的JSON串生成对应的实体类
新建一个实体类,在头部位置添加描述信息,然后回车补全。
如果将描述放到类的内部,也可以生成,但会是一行一行来生成。但是如果描述下方添加内部类的代码,则是可以一次生成的。
2. 根据SQL语句来生成对应的实体类
以数据库相关信息生成, 支持插入语句和建表语句。
GitHub Copilot: 使用小Demo
Demo1:
需求:
开发一个读取并打印CSV 文件的 Java 应用程序。
完成这个需求, 创建好JAVA实体类后,仅仅只需要2个命令。
1.读取CSV文件, 并将数据存储在map列表中。
2.打印CSV文件中的数据。
小结:
从我开始创建实体类开始, 到我完成这个需求, 我一共花了13分钟左右。
其中大概有5分钟的时间, 我花在了找CsvReader的依赖Jar包, 并将Jar包依赖进项目中。
大概有3分钟花费在刷新项目Maven依赖上。
还有5分钟我在Code Review, 来确保生成的代码是正确。
程序运行结果:
Demo2:
需求升级:
开发一个从URL下载CSV 文件, 同时读取并打印文件内容的 Java 应用程序。
这次仅仅需要一个命令即可完成:
1.从指定URL下载CSV文件, 读取文件内容存储在map列表中。
2.从右侧的多个建议中, 选取一个我们需要的建议。
小结:
这次更快, 由于之前已经做好了Jar包导入, 这次不需要重复导入。
完成这个需求, 我一共花费了5分钟左右。
其中, 有2分钟的时间, 我是在右侧挑选合适的代码建议。
而且可以看到, 这次只输入了一条命令。
打印那条命令, 由于Copilot学习了Demo1的代码, Copilot会自动帮我们生成出来。
这个特性会导致一个结果:
即, 随着代码的越写越多, 你会发现Copilot用起来会越来越顺手。
这次生成的代码和刚刚Demo1对比, 非常相似, 主要有2处不同。
1.函数入参由文件路径变更为下载URL。
2.文件来源由读取文件路径, 变更为从URL下载文件流, 并用文件流生成CsvReader对象。
符合我们的预期。
争议
Copilot具有很多优点,但它也面临着一些争议,其中一些包括:
1.代码生成的准确性问题:由于Copilot是基于机器学习技术的,它可能会生成不准确或不完整的代码。这可能导致安全问题或功能缺陷。
2.版权问题:Copilot可以通过生成与其他人的代码相似的代码来侵犯版权。这使得一些人担心Copilot可能会导致知识产权的问题。
3.缺乏透明度:Copilot使用的机器学习模型是封闭的,没有公开的源代码,这意味着没有人知道它的内部工作原理。这可能导致缺乏透明度和可验证性。
4.工具的发展方向:Copilot是由GitHub和OpenAI共同开发的,它们的发展方向可能会受到商业利益和技术路线等因素的影响。这可能会导致Copilot的未来发展方向存在一定的不确定性。
总结
GitHub Copilot经过海量代码资源库进行学习训练,结合你当前编码环境上下文, 给到你的即时建议通常会按照你的预期运行, 能够让你在使用过程中产生一种越用越懂你的感觉, 会让你写代码产生一种酣畅淋漓的快感。
总之,GitHub Copilot是一个有用的编程辅助工具,可以加速代码开发,提高生产效率。在使用它时,需要理解其局限性并保持警惕,以确保代码质量和安全性。