前言
Github Copilot 官方指南中基于 VScode(vscode 和 github都是微软产品)展示了一些使用示例,根据这份指南进行了一些在IntelliJ IDEA 中的使用实践。
关于Copilot如何安装使用、账号申请这块比较简单这里就没有列出。
初识Copilot
Github 对于 Copilot (基于chatGPT 3.5实现)的官方解释为:结对程序员。也就是你可以把copilot 当做你结对编程的伙伴。
为什么要专门提这个角色呢?
因为很多程序员可能已经使用过chatGPT,很容易把copilot当做类似的生产工具。
只能说这两个工具很相似,但是有差异的。跟chatgpt交流时,只需要描述需求,chatgpt会给你一段代码;但copilot 不一样,它更像一个结对伙伴或者代码补全工具 ,如果你有复杂的需求,那么你需要慢慢引导或者很详细的描述自己的需求,它才能慢慢给你提供代码。
比如你跟chatgpt说,请提供一个基于java的分布式锁,chatgpt就会给你完整的一对代码。你如果也这样跟copilot说,实际上得不到你想要的结果。
那如何说呢才能得到自己想要的结果呢?这就是这篇文章要帮你认识的,相信看完后你会理解copilot的角色和如何描述自己的需求。
示例
copilot 使用时,用户代码写完后,按 enter 键即可等待copilot生成代码,按 tab键即可接受代码建议,按 alter + [ 或 alter +] 可以切换生成的代码(有时候会生成好几套代码)
根据注释补全代码
- 输入注释 使用 LocalDate 生成两个日期变量
可以很明显地看到,按 Enter键之后 copilot就生成了相应的代码(白色背景部分)
手动格式化代码之后,就可以得到如下的效果。
根据注释生成方法
- 输入注释 比较两个日期区间是否有交集
根据方法名自动补全
- 输入 public static getDays 将自动生成如下内容
在上述示例中,我们根据注释或者方法名生成了方法体。
可细看之下,我们会发现有些方法是正确的,有些是有问题的。
比如 isOverlap 是没问题的, getDays 其实是错误的。
我觉得更准确地说应该描述的需求有歧义吧。
可以看到 2021-07-01 到 2023-07-02 的日期相差也是1 天,这很明显不是我们想要的。
我们调整如下
改动之后的结果如下
可以看到,此时才符合我们的需求。
通过这个示例,不知道你是否才感受到什么叫做结对编程。按步骤解释自己的需求才能更好地得到自己想要的代码。
生成测试用例
- 未得到想要的结果
- 成功得到测试用例
为什么第一次没有得到想要的结果呢?
我的理解是第一次方法名写的不规范 testGetDaysWithFiveExample 这个方法名其实有问题的,如果我们再最后加个 s应该第一次就可以成功testGetDaysWithFiveExample。
为什么后面写的方法名没有带 s也可以成功呢?
这是copilot它会根据 IDEA 中已打开的文件进行上下文关联,具体会根据多少个文件进行关联目前官方没有明确支持,但有明确说到会根据当前编辑的文件上下文进行创作。(官方解释是相邻选项卡关联技术),而且官方目前在研究将整个项目进行上下文关联。
根据注释/方法名生成 SQL
实践感受
要想更高效地让copilot帮助到自己,建议保持以下几个习惯。
- 按步骤喂提示,让自己的需求能更容易被工具理解
- 要明白copilot会根据当前文件内容做上下文来生成代码
- 保持良好的命名规范和代码风格,将使copilot更好地理解我们的需求
目前 copilot 在 vscode上线了一个试用版的copilot chat (基于chatGPT 4.0)类似于chatgpt一样可以进行聊天的方式沟通,有兴趣的朋友可以一试(我才刚申请试用)