寫代碼效率不高?放過Ctrl C 和 V,讓AI來幫你寫代碼吧
做為程序員,不知道你有沒有想像過,如果某天,不再需要面向Google、Stackoverflow編程,不再需要Ctrl + C 和 Ctrl + V,你在IDE里敲出某個編程語言的關(guān)鍵詞時,像導(dǎo)航一樣,下一步的代碼就已經(jīng)展現(xiàn)出來。
做為程序員,不知道你有沒有想像過,如果某天,簡單說幾句話,或者簡短寫幾句,就能夠?qū)崿F(xiàn)你的需求,完成代碼開發(fā)。談笑間,bug 灰飛煙滅。一切盡在彈指一揮間。
做為程序員,不知道你有沒有想像過,如果某天,寫程序也能有個智能的助手,像出行、購物一樣,告訴你哪個API調(diào)用的人更多,他們是怎么用的。
那樣就會空出大量的時間,去做代碼之外,其它你想做的事情。當(dāng)然,你也可以接更多的需求,寫更多的代碼嘛 :-)
這樣的情況你有沒有想過?
關(guān)于程序員,有個調(diào)侃的笑話,大意是這樣的:
一個程序員,技術(shù)水平一般,經(jīng)常寫代碼到很晚,bug 還多。他的女朋友很是心疼。后來一段時間,這哥們發(fā)現(xiàn),前一天晚上遺留bug的代碼,第二天在公司運行一切正常。太驚訝了。某天半夜醒來忽然發(fā)現(xiàn),他女朋友在電腦上幫他改bug...
看到能寫代碼改bug的女朋友,是不是讓前面的想法更強烈了?
夢想還是要有的,萬一實現(xiàn)了呢?
這不,說著說著它就來了。迎面走來的就是我們今天要說的「寫代碼小助手」,「AI代碼小能手」,無所謂怎么稱呼了,你開心叫它大黃也行。
進入視線的就是它 Codota:
1. 安裝
在IDEA的插件列表里搜索一下,你一定會注意到開頭介紹里的那句「AI code completions」。
當(dāng)然,在其它的IDE里也大概類似,畢竟人家的口號是「AI Code Autocomplete for All Languages and IDEs」,劃重點,所有的語言和IDE。
具體有什么本領(lǐng),就讓它來讓兩步,出來溜溜吧。
插件安裝之后,在編寫代碼時的提示列表里會多出來許多淺綠色的,這是 Codota的內(nèi)容。
2. 使用
官方功能介紹的視頻里,是以JDBC為例,除了這種API的調(diào)用提示外,還有常用代碼片段自動生成,要不人家口號也不敢喊那么響。
比如你在IDE里剛寫了個 File ,他會詢問你想干啥。
比如常用的文件拷貝、內(nèi)容壓縮等等。如果選擇了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);
- }
- } catch (IOException e) {
- // ... handle IO exception
- }
這下知道為啥人家口號喊的響的原因了吧。
另外,你有沒有注意到,在提示的列表里,F(xiàn)ileOutputStream 和 FileWriter 這兩項后面的數(shù)字。這也是除了自動補全之外稱為AI的能力,畢竟還大數(shù)據(jù)分析了嘛。
特別是對于多個外部項目依賴時,如果重名了,該用哪個,大數(shù)據(jù)告訴你,更多人的選擇是誰。
比如要通過Http請求個資源,除了要用Get/Post,構(gòu)造Entity,拼接URL,還要干啥來著,摸了一把日漸稀少的頭發(fā),寫下了HttpClient,一回頭,IDE里早提示了:
那就Post吧,隨著下方向鍵和一聲Enter的大力敲擊,這段代碼就出現(xiàn)了:
- 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
- }
- HttpEntity entity = httpResponse.getEntity();
- return entity != null ? EntityUtils.toString(entity) : null;
- });
- // ... do something with response
- } catch (IOException e) {
- // ... handle IO exception
- }
我想為了提升代碼的開發(fā)效率,許多人曾經(jīng)會記錄一些常用的代碼片段,一般稱之為代碼的Snippet,一些編輯器里也有這種管理小工具。
這一下子,連 Snippet 也省了,還少了Ctrl C +V 的過程。
3. 查看更多
如果提示列表里沒有感興趣的,還想看更多的示例怎么辦?
好辦!
在某個關(guān)鍵詞右擊對應(yīng)的類名,在彈出的菜單里選擇【Get relevant examples】,會在IDE的右側(cè)看到更多關(guān)于該類的使用Demo。
右側(cè)的顯示
4. 再多
如果還不夠,點擊這個鏈接,在瀏覽器里一次看個痛快吧。
本文轉(zhuǎn)載自微信公眾號「 Tomcat那些事兒」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 Tomcat那些事兒公眾號。