Google在今年的IO大會上宣佈,將Kotlin做爲Android開發的一級語言。做爲緊跟潮流的弄潮兒,對kotlin稍作了解後,發現其有優秀的特性,因此就開始了學習,而Eyepetizer-in-Kotlin即是對kotlin進行學習後的階段性成果。java
Eyepetizer-in-Kotlin的全部數據來源自開眼視頻,不涉及任何商業用途,有如侵權,當即刪除。android
具體api接口能夠參考項目中的Api類。git
含有開眼視頻每日推薦、熱門及分類小視頻
支持視頻播放,包含全屏播放等特性
支持關鍵詞搜索,想看什麼看什麼
記錄歷史觀看,以及緩存視頻,本地播放等功能github
做爲學習kotlin的一款app,在擼代碼的過程當中學習kotlin的語法及特性。編程
Eyepetizer-in-Kotlin適合初學者做爲學習kotlin語言的一個項目,能夠在作項目的同時體驗到kotlin語言的優勢。api
在作Eyepetizer-in-Kotlin的過程當中,瞭解到了許多kotlin的特性,用在平常開發中,大大提升了開發效率,下面就簡單介紹下在項目中用到的幾個重要的kotlin特性。緩存
咱們能夠直接使用xml中對應的id,而且import對應的文件,不在須要findViewByIdbash
import kotlinx.android.synthetic.main.activity_watch.*
.........
tv_hint.visibility = View.VISIBLE
tv_hint.text = "告別findViewById"複製代碼
延遲加載有幾個好處。首先因爲加載時機推遲到了變量被訪問時,所以它能夠提升應用的啓動速度。其次,這樣的延遲加載也有更高的內存效率。app
val mModel: FindDetailModel by lazy {
FindDetailModel()
}複製代碼
當第一次使用mModle的時候進行初始化ide
lateinit var mAdapter: DownloadAdapter複製代碼
在任何想進行初始化的位置進行初始化
Lambdas 表達式在減小源文件中代碼的總行數的同時,也支持函數式編程。
使用 lambdas 表示式時,onClickListener 的用法以下:
holder?.itemView?.setOnClickListener {
var keyWord = list?.get(position)
var intent : Intent = Intent(context,ResultActivity::class.java)
intent.putExtra("keyWord",keyWord)
context?.startActivity(intent)
mDialogListener?.onDismiss()
}複製代碼
數據類簡化了類的定義,自動爲類添加equals(),hashCode(),copy() 和toString() 方法。它明肯定義了 model 類的意圖,以及應該包含什麼內容,同時將純數據與業務邏輯分離開來。
data class VideoBean(var feed:String?,var title:String?,var description:String?,
var duration: Long?,var playUrl: String?,var category: String?,
var blurred : String?,var collect:Int?,var share:Int?,var reply:Int?,var time:Long) : Parcelable,Serializable {}複製代碼
就是如此簡單,對比之前動輒幾百行的數據類,簡潔了太多。若是想實現序列化Parcelable,能夠下載支持kotlin序列化的插件,一鍵實現,很是方便。
經過使用 Kotlin 的集合過濾功能,咱們可使代碼變得更清晰簡潔。
bean.issueList!!
.flatMap { it.itemList!! }
.filter { it.type.equals("video") }
.forEach { mList.add(it) }複製代碼
經過以上過濾,即可以獲得咱們想要的內容。
擴展的好處在於它容許咱們爲一個類添加功能同時無需繼承它。例如,你是否曾經但願 Context 有某些方法,好比 showToast()?使用擴展,你能夠很容易實現這個功能:
fun Context.showToast(message: String) : Toast {
var toast : Toast = Toast.makeText(this,message,Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER,0,0)
toast.show()
return toast
}複製代碼
字符串
Kotlin在字符串之中可使用變量,相對與在Java中的字符串拼接,更讓人感受到舒服。
holder?.tv_detail?.text = "發佈於 $category / $realMinute:$realSecond"複製代碼
when
Kotlin中when的出現替代了switch,但其功能更增強大。
override fun onClick(v: View?) {
when(v?.id){
R.id.tv_watch ->{
var intent = Intent(activity,WatchActivity::class.java)
startActivity(intent)
}
R.id.tv_advise ->{
var intent = Intent(activity,AdviseActivity::class.java)
startActivity(intent)
}
R.id.tv_save ->{
var intent = Intent(activity,CacheActivity::class.java)
startActivity(intent)
}
}
}複製代碼
固然Kotlin的特性不止如此,還有更多高階的特性如:高階函數, Anko等,這些特性還需進一步學習應用
關於爲何要學Kotlin,在Google IO大會剛把kotlin做爲一級開發語言後就已經有了不少的討論。
當時學習的必要性還不明確,過了幾個月以後,咱們再來看一下學習的必要性。
經過以上分析,咱們能夠知道kotlin對於android開發的優點,同時kotlin也是基於JVM的一門靜態語言,與Java完美兼容,不存在項目遷移等問題。除此以外,學習成本也比較低,很好入門。固然若是想要達到熟練程度,還需繼續練習。
國外:Pinterest、Evernote、Uber等企業已經開始應用,Google也在一些小項目中應用kotlin,Google一些專家很是看好Kotlin。
國內:據我所知,美團已經開始使用kotlin。一些大型互聯網公司因爲業務導向,開發壓力重,不敢輕易使用kotlin,不過它們已經開始躍躍欲試,着手在新的項目中使用kotlin。
講了這麼多,學習kotlin雖然不是必須的,可是應對趨勢發展,而且學習成本不高,那麼多掌握一門技能,百利而無一害。
Github地址:github.com/LRH1993/Eye…
喜歡就給個star,但願能對你們學習kotlin有幫助!