Kotlin尝鲜

2018/01/02

Tags: kotlin

最近稍微抽空看了下kotlin,总的来说用起来还是不错的,因为没有细细去学习,所以只了解了最基本的用法。
使用起来和java的语法大同小异,不过有一些比较有意思的特性,可以减小代码量和使代码更优雅。
其实说白了就是语法糖,然而架不住大家就喜欢,哎

d19470aeb9e3fd3218039297c50b6560
用的好的话,确实可以减少代码量,提高开发效率。 所以下面就来看看kotlin的语法糖奇技淫巧吧

data类

java的pojo类实际上就是一大堆胶水代码,极大的阻碍了开发速度的提升。虽然有各种各样的自动生成,但是总觉得原生支持才带劲

例子:

data class User(var name:String?,var id:Long)

一行搞定,自动重写了如下方法:

基本上一行解决,非常简洁。 并且得益于这个代码量,可以把一个项目里所有的pojo类写在一个.kt文件下,还不是美滋滋?
什么,你说get/set?开玩笑,kotlin的类默认可是public的,直接赋值就完事了

when

例子:

override fun onClick(v: View?) {
        when (v!!.id) {
            R.id.btn_login ->
                doLogin()
            R.id.agreement_check_box ->
                btnLogin.isEnabled = agreementCheckBox.isChecked
        }
    }

逻辑类似于java里面的switch case,不同之处在于 使用范围更广,比如可以用来判断类型

        when (a) {
            is String ->
                ...
            is Date ->
                ...
        }

还可以用来返回值

val res = when {
     s == null -> null
     s.contains("detail") -> "detail"
     else -> ""
}

apply let

例子:

MessageEvent().apply {
                tag = mTag
                object = datas.get(position)
            }.let { EventUtils.postSticky(it) }

这段翻译成java是这样:

MessageEvent m = new MessageEvent()
m.tag = mTag
m.object = datas.get(position)
EventUtils.postSticky(m)

使用apply 可以操作MessageEvent里面的属性,然后使用let 再把最后的MessageEvent返回并传给其他的地方使用。it表示apply返回的对象(MessageEvent)。一句链式调用使可读性增强。

扩展函数

又一个重磅炸弹,可以让某个类凭空使用并不存在的方法。比如我要隐藏一个view,平时这样写:

view.setVisibility = View.GONE

使用扩展函数以后,先定义一个扩展函数:

fun <T : View> T.gone() {
    this.visibility = View.GONE
}

然后就可以对任意的view使用view.gone()方法了,是不是很简单?
有人说这不就是一个工具类嘛?这样想你就错了。下面来说下为什么他是我眼中的重磅炸弹

其他

像支持java8的函数式编程、lambda语法、forEachmap 这样的特性,在这个时代几乎已经是标配了,就不赘述了。

给我个人的感觉是,kotlin作为Google官方支持Android的语言,并没有拿出有竞争力的东西来,他能做的java都能做,虽然兼容java但是还是有一些坑的——比如泛型等。所以无法作为一个能替代java的或者能和java并驾齐驱的东西。

但是考虑到他的背靠大树,以及如此年轻,还是大有发展前景的,不过这都是后话。java的东西还是需要学好的,正常人并不会因为他就抛弃java。