利用AI提升代码编写效率,告别复制粘贴
作为程序员,是否曾想象过有一天,无需再依赖Google或Stack Overflow进行编程,也不再需要频繁地使用Ctrl + C和Ctrl + V?当你在IDE中输入某个编程语言的关键字时,下一步的代码便会自动呈现,仿佛在导航你前行。
又或者,是否想过有一天,只需简单表达几句话或写下几行代码,便能实现你的需求,轻松完成开发。闲聊间,bug便会悄然消失,一切都在指尖之间轻松完成。
想象一下,如果编写程序的过程中有一个智能助手,像你购物或旅行时的导航一样,告诉你哪个API调用更为常用,以及它们的使用方式。这将为你释放出大量时间,用于从事其他你热爱的事情,甚至能够接更多的需求,编写更多的代码。
这样的情景,你是否曾设想过?
有一个调侃程序员的笑话:一位技术水平一般的程序员常常加班至深夜,频繁遇到bug,让他的女朋友十分心疼。某天,这位程序员发现,前一天晚上的bug在第二天竟然自行修复,令他惊讶不已。后来,他突然意识到,原来是他的女朋友在午夜时分默默地为他修改代码……
看到能写代码的女朋友,是否让你对前述的想法更加向往了呢?梦想总是要有的,谁知道它会不会实现呢?
在此,我们要介绍的便是今天的主角——“写代码小助手”,或称“AI代码小能手”,无论你如何称呼它,随你开心。它就是CodOTA:
1. 安装
在IDEA的插件列表中进行搜索,你一定会注意到开头的介绍中提到的“AI code completions”。其他IDE也大致相同,毕竟他们的口号是“AI code Autocomplete for All Languages and IDEs”,重点是适用于所有语言和IDE。
安装插件后,当你编写代码时,提示列表中将会出现许多浅绿色的内容,这便是CodOTA的成果。
2. 使用
在官方功能介绍视频中,以JDBC为例,除了API调用的提示,CodOTA还会自动生成常用代码片段,这也是他们自信喊出响亮口号的原因。
例如,当你在IDE中输入“file”,它会询问你想执行的操作。
如常见的文件拷贝、内容压缩等。如果选择了“copyfile”,那么下面的代码便会自动生成:
try (FileInputStream fis = new FileInputStream(srcfile); FileOutputStream fos = new FileOutputStream(dstfile)) { int len; byte[] buffer = new byte[4096]; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); }}这就是为什么他们的口号如此响亮的原因吧。
另外,是否注意到在提示列表中,fileOutputStream和fileWriter后面的数字?这显示了除了自动补全之外AI的另一个能力,利用大数据分析来帮助你做出选择。
特别是在处理多个外部项目依赖时,如果出现重名情况,大数据会告诉你更受欢迎的选择。
比如说,当你需要通过HTTP请求资源时,除了要使用GET/POST,构造Entity和拼接URL外,还需要做些什么呢?在苦思冥想之际,你写下了HttpClient,回头一看,IDE里已经提示你了:
try { HttpPost httpPost = new HttpPost("https://example.com"); httpPost.setEntity(new StringEntity("{\"key\": \"value\"}", ContentType.APPLICATION_JSON)); String responseBody = httpClient.execute(httpPost, httpResponse -> { int status = httpResponse.getStatusLine().getStatusCode(); if (status < 200 || status >= 300) { // ...handle unsuccessful request }}); // ...do something } catch (IOException e) { // ...handle IO exception }为了提升开发效率,许多人曾记录一些常用代码片段,通常称之为代码Snippet。一些编辑器中也有这类管理工具。现在,连Snippet的过程也省去了,同时也不再需要Ctrl + C和Ctrl + V。
3. 查看更多
如果在提示列表中没有找到感兴趣的内容,想查看更多示例该怎么办?
很简单!在某个关键字上右击对应的类名,在弹出的菜单中选择“Get Relevant examples”,便能在IDE的右侧看到更多关于该类的使用示例。
4. 再多
如果仍然不够,点击链接,在浏览器中一次性查看更多示例吧。
注意:
1. 必须保留并原样返回所有 [[[IMG_n]]] 占位符。
