以下是在實(shí)際開發(fā)過程中與eclipse java maven三者的對(duì)比所體會(huì)的.
idea
1 界面美觀
這個(gè)就仁者見仁智者見智.
2 不卡
曾經(jīng)在用eclipse的時(shí)候, 有很多次寫代碼的時(shí)候就卡死了, 不得不關(guān)掉再重新打開. 而在用idea的時(shí)候死沒有出現(xiàn)過這種情況. 也可能是打開一個(gè)idea只能打開一個(gè)項(xiàng)目,而eclipse是打開一個(gè)工作空間.
3 測試方便
在idea中寫main方法或junit測試的時(shí)候,直接在旁邊就有個(gè)運(yùn)行按鈕, 而eclipse一般是, 單擊方法名,右鍵 run juin test, 雖然可以設(shè)置快捷鍵, 但是這已經(jīng)成為了習(xí)慣.
4 可以定義項(xiàng)目模板
比如我在架構(gòu)2.0 的base項(xiàng)目, 就把他存儲(chǔ)為模板, 每一次開發(fā)新項(xiàng)目時(shí)以這個(gè)模板為基礎(chǔ)創(chuàng)建即可.
5 代碼提醒智能
這個(gè)就體現(xiàn)在寫代碼的方方面面 只能在實(shí)際寫代碼的過程中多體會(huì).
kotlin
1 去掉分號(hào) 去掉分號(hào) 去掉分號(hào), 去掉new 去掉new 去掉new 重要的事說三遍.
每行代碼末尾不需要分號(hào),新建每個(gè)對(duì)象不需要new.
不要小看這個(gè)分號(hào)和new, 不僅是可以少敲很多下鍵盤, 關(guān)鍵是這個(gè)分號(hào)和new 真的沒什么必用.
這也足以說明kotlin致簡的設(shè)計(jì)思想, 能省略的盡量省(分號(hào), new, lambda的括號(hào)...) 不能省略的就默認(rèn)自帶(單例, getter, setter,it...)
我當(dāng)時(shí)學(xué)kotlin的時(shí)候就深深的喜歡上這個(gè)語言了, 甚至那時(shí)玩塞爾達(dá)的時(shí)候給我第一匹馬取的名字就叫kotlin.
2 單文件可以寫多個(gè)類
這也是把java換成kotlin最根本的原因, 因?yàn)殡S著項(xiàng)目的發(fā)展類越來越多, 查找一個(gè)類都已經(jīng)變的很麻煩, 我不喜歡用自帶的搜索, 習(xí)慣了從包的一級(jí)一級(jí)點(diǎn)下去, 很多類就只有幾行代碼, 而很多類又是相關(guān)的, 完全是可以放到一起的. 這也是架構(gòu)2.0的由來.
3 擴(kuò)展函數(shù)和屬性
在java中寫日志的方式
一 在每個(gè)類中添加logger
二 使用lombok
第一種方法就不說了, 太麻煩, 第二種方法, 稍微好一些, 只是需要在每一個(gè)類上加一個(gè)注解.
而在kotlin中, 你只需要全局定義一個(gè)擴(kuò)展屬性, 那么每一個(gè)類都會(huì)自帶一個(gè)log變量.
kotlin的Any對(duì)象,對(duì)應(yīng)java 的Object對(duì)象, 所有的類都是繼承Any對(duì)象等同于java中所有的父類都是Object.
在java中打印的方式
kotlin中
雖然只是少了11個(gè)字符, 但是真的看著要舒服很多, 因?yàn)楹啙?
接口的輸入輸出都是json字符串, 通常需要打印json串來看我們的接口是否正確.
在java中打印對(duì)象的json串
而在kotlIn中
有了擴(kuò)展函數(shù), 相當(dāng)于每一個(gè)對(duì)象都自帶了println方法, pj (pring json) 方法和toJsonString屬性.
調(diào)試測試有了翻天覆地的變化.
只要是你經(jīng)常用的都可以寫成擴(kuò)展函數(shù)和方法.
4 可以定義全局屬性和方法 不需要有類
這其實(shí)是對(duì)java中各種各樣的Util的優(yōu)化.
在java里的工具類是這樣的
而kotlIn中只有一個(gè)Util文件即可
因?yàn)楣ぞ哳愅ǔJ钦{(diào)它的方法,根本不需要類名,直接調(diào)用方法即可.
5 lambda表達(dá)式
省略了參數(shù), 有默認(rèn)參數(shù)it , 新增了各種各樣常用的方法, list map set 的構(gòu)造非常方便. 也就是說它會(huì)在方方面面減少你的代碼量.
6 對(duì)象及帶接收者的lambda with apply let run
不需要為對(duì)象的每一個(gè)屬性添加get, set方法. 再也看不到a.getXXX(), a.setXXX() 這樣啰嗦的語法了.
頁面?zhèn)鞯慕?jīng)緯度的格式是度分秒數(shù)組, 自動(dòng)轉(zhuǎn)換成小數(shù)的度. 插入數(shù)據(jù)庫后, 從數(shù)據(jù)庫取的小數(shù)的度會(huì)自動(dòng)轉(zhuǎn)換成度分秒返回給前端顯示.完全不需要在業(yè)務(wù)代碼中寫轉(zhuǎn)換邏輯.
構(gòu)造函數(shù)可以寫默認(rèn)值, 參數(shù)也不需要按照順序.
構(gòu)造函數(shù)和apply, run 等等的結(jié)合 ,實(shí)在是太方便了, 以前煩人的建對(duì)象和給對(duì)象屬性賦值在都沒有了.
與spring自動(dòng)注入的結(jié)合也方便多了.
7 字符串模板和三引號(hào)運(yùn)算符
字符串模板, 主要應(yīng)用在日志信息里.再也不需要用{}預(yù)留位置,也不需要擔(dān)心參數(shù)寫的不對(duì)應(yīng)了.
三引號(hào)運(yùn)算符就很強(qiáng)大了, 再配合mybatis的script 直接就可以去掉mybatis的xml.
8 其他比較常用的 還有 單例 ?, !!, ?:, when, if else, 等運(yùn)算符.
gradle
1 配置使用代碼, 擴(kuò)展性強(qiáng), 也通俗易懂.
2 自定義任務(wù)簡單. 比如遠(yuǎn)程打包部署,自動(dòng)寫打包時(shí)間.
3 打包效率高.
還是一樣我并不會(huì)推薦大家使用這些, 我只是把我在開發(fā)中的感受寫下來.畢竟我只寫了優(yōu)點(diǎn), 缺點(diǎn)就是如果沒有很強(qiáng)的目的性是很難堅(jiān)持學(xué)下去的(主要還是新事物的抵觸心理). idea和gradle在我沒有遇到kotlin的時(shí)候, 就已經(jīng)嘗試過了幾次,最終都是放棄而還是繼續(xù)使用eclipse和maven. 就算學(xué)好了想在實(shí)際開發(fā)中應(yīng)用也不是易事.我是由于我們公司后臺(tái)開發(fā)比較少,也不是很忙,大家有時(shí)間去學(xué)習(xí),最終應(yīng)用成功.