首页 > 程序开发 > 移动开发 > 其他 >

Kotlin——1.实际使用,安利与相关配置

2016-11-07

Kotlin搞起来——1 实际使用,安利与相关配置

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写的代码,一脸懵逼,根本看不懂,自己花几天学习了下,其实
不然,用起来真的很顺手,所以我也非常建议你试试,真的很嗨!

相关文章
最新文章
热点推荐