頻道欄目
首頁 > 資訊 > 其他 > 正文

Kotlin——1.實際使用,安利與相關配置

16-11-07        來源:[db:作者]  
收藏   我要投稿

1.嘮嗑下實際使用情況


前段時間稍微閑暇了一些,就搗鼓著重構自己的商城,之前也重構過一個
電臺的項目,為了讓項目支持Lambda表達式,需要添加retrolambda依賴,
可能有些朋友不知道Lambda表達式是什么,你可以簡單理解成用來取代匿名內部類
的一個手段,比如原先你創建一個線程并啟動的代碼可能是這樣的:

而使用Lambda表達式,你只需下面一句代碼即可:

臥槽,好簡潔,又比如Android常寫的為按鈕設置匿名內部類點擊事件的:

除此之外,還可以使用Lambda表達式來遍歷列表:

除了這些,還有函數式接口,流API等,但是很遺憾的是,即使你加入了
retrolambda依賴,但Android Studio中也只是支持只函數式接口(匿名內部類替換),
你連forEach都調用不了!

 

可以讓我在AS上使用 Java 8的一些新特性

這是我傾向于使用Kotlin的第一個原因。
接著再說一點Kotlin很吸引我的一個地方,實際開發中,遇到最多的
BUG莫過于:NullPointerException(空指針異常),因為疏忽或者
各種原因,某個變量出現了我們沒預料到的空的情況,然后引起程序崩潰。
然后我們像貼黃皮膏藥一樣,在出現空指針的地方加上一個判斷:

if(abc != null) { abc.setXxx() }

對此相信各位開發者對此都深惡痛絕,好麻煩咧!
而Kotlin在源頭上就直接避免了空指針的問題,

NULL安全

所有變量聲明默認:不可為空,
如果你用null值對不可為空的引用賦值,編譯器直接提示錯誤:

如果你想讓這個變量可為空的話,需要在類型后面手動增加一個問號

編譯器雖然通過了,沒提示錯誤,但是如果你按照上面那樣直接寫,也是會空指針的,
你需要走一發if(str != null),另外如果你做了判空的話,這個引用是會直接
轉換成:不可為空的類型。!你可能會吐槽,這和上面我們做的那種有什么
區別。其實可更簡潔些,你只需要在引用后面加上一個問號,即可完成判空操作:

只有在前面的str 不為null 的情況下,才會去調后面的toString(),否則,什么都不做!
除了這個?(安全訪問操作符)外,你還可以用!!操作符,強制編譯器執行可空類
型引用時跳過限制檢查,但是如果引用為空,還是會報空指針的哦!

Kotlin對NULL異常的安全處理很強勢,而更加強勢的莫過于:

代碼簡潔炫酷,逼格爆炸

摘我電臺項目中的一個bean出來:

寫構造方法,然后寫一堆get和set方法,盡管這些不用我們寫,只需一發Alt + Insert,
然后自動生成就好,如果你用Kotlin的話,你只需下面一句:

嗯,就是這么簡單,構造方法,get和set等方法都會在編譯的時候自動生成,如果你對此
感興趣的話,可以用JD-GUI打開編譯生成的Story.class文件,你會發現相關的方法都已
實現~,可能有些讀者說:你還要慢慢敲參數,我直接右鍵就能生成,比你寫得快,2333,
只能說你開心就好。

再舉個例子,相信大部分玩家都已經從findViewById過渡到了注解階段,比如用ButterKnife:

而在Kotlin中,你只需要導入這個布局,然后直接可以用控件的id來亂嗨:

是的,如果你結合著Anko這個DSL庫一起玩的話,你甚至可以寫成這樣:

你可能會問,有沒有更加炫酷的寫法,,或者問我,你是怎么寫的?
說到這里,就不得不談我鐘情于Kotlin的下一個原因了:

溜到飛起的擴展函數

不知道擴展函數是什么?沒關系,基本每個人的項目中都會有一個Utils包,
在這里面丟一些常用的工具類,比如:

然后你用到的時候需要:ResourcesUtil.getScreenWidth(Context context)傳參調用,
如果你用了Kotlin,你只需要建立一個放擴展函數的工具類,然后在這里寫擴展函數。

然后,你發現在所有地方,你可以直接調

這里Any類型是Kotlin中所有類的父類,類似于Java中的Object類,在.前面加上一個類型,
代表的意思是,允許在這個類型中執行這個函數,比如如果改成Activity,那么在Activity
類型的類里,就可以直接用這個擴展函數,而其他非Activity類型的類則不可用!

說回控件綁定的問題,我是用的JakeWharton大神的kotterknife,只需把ButterKnife.kt
文件加入項目中,就可以直接用了:(Github地址:https://github.com/JakeWharton/kotterknife)

然后在你需要綁定控件的地方,直接:

說到這里,不知道你是不是已經有些心動了,但是你還是有一些顧慮,比如:

Kotlin的學習成本高嗎?和Java一起混著玩會問題嗎?”

:我覺得單看文檔,最多一天你能看完,當然你還是得運用到項目中,才能體驗到Kotlin
的便利,以及熟悉Kotlin的寫法;
支持互相調用,Java和Kotlin可以共存。
還有,如果你裝了Kotlin的插件后,支持一鍵將整個項目轉換為Kotlin項目,當然批量轉是
會很多報紅的,而且很多垃圾代碼,我還是傾向于自己寫~

小結下上面說的喜歡Kotlin的幾點

可以讓我在AS上使用 Java 8的一些新特性 NULL安全 代碼簡潔炫酷,逼格爆炸 溜到飛起的擴展函數

以過來人親身經歷告訴你,用了Kotlin后,你就會不會想用回冗繁的Java了!

更多關于Kotlin的評價可見逼乎:如何評價 Kotlin 語言?


2.Kotlin的文檔


官方文檔(英文):http://kotlinlang.org/docs/reference/ 國人翻譯https://github.com/wangjiegulu/kotlin-for-android-developers-zh/blob/master/SUMMARY.md

3.安裝Kotlin插件

打開Plugins -> Install JetBrains plugins -> 輸入Kotlin,把這個裝上

重啟后,File -> New 看到如下情況,說明插件安裝成功


4.為項目引入Kotlin依賴

這個可以不用配置,當你在工程中新建一個Kotlin File的時候頂部會有:

點擊進行設置

然后AS會自動幫你引入Kotlin相關的依賴!

當然,你也可自己手動添加,app層次的build.gradle添加:

apply plugin: 'kotlin-android'
main.java.srcDirs += 'src/main/kotlin'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

項目層次的build.gradle添加:

ext.kotlin_version = '1.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"


5.寫個簡單例子體驗下

先改下布局,加個簡單的按鈕

新建項目,然后把MainActivity.java刪掉,新建一個MainActivity.kt文件,代碼如下

這里為了簡化Toast我特意下了個外部函數,新建了一個ViewEx.kt的文件,代碼如下:

還有一點需要注意的是,直接使用id,需要在app層的gradle中加上:

apply plugin: 'kotlin-android-extensions'

不然是會報Unresolved reference:kolinx的錯誤的。!

好吧,接著像普通項目一樣,運行起來就可以了,運行截圖:


本節小結


內容還是比較通俗易懂的,沒有什么高深的東西,之前沒學kotlin的時候看到
別人用Kotlin寫的代碼,一臉懵逼,根本看不懂,自己花幾天學習了下,其實
不然,用起來真的很順手,所以我也非常建議你試試,真的很嗨!

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片