最近在公司接了个新项目,团队决定用Kotlin开发安卓App。说实话,刚开始我还挺犹豫的,毕竟之前一直用Java,突然换语言总怕踩坑。但真正上手写了几周代码后,我得说一句:Kotlin写安卓,真挺顺手的。
语法简洁,少写很多“样板代码”
以前用Java写个点击事件,光匿名内部类就得好几行。现在用Kotlin,一行Lambda搞定:
button.setOnClickListener { toast("被点了!") }
再比如判空处理,Java里经常要写if (obj != null),Kotlin一个?.操作符就解决了:
val name = user?.profile?.getName() ?: "未知"
这种小细节积少成多,一天下来能省不少键盘敲击。
空安全机制,减少崩溃概率
做过安卓开发的都知道,NullPointerException简直是日志里的常客。Kotlin从类型系统上就把空值问题管住了。声明变量时必须明确是否可空,编译器会强制你做判断,运行时崩溃自然就少了。
上周我们测旧功能时,发现Java模块里有个页面偶尔闪退,一看日志果然是空指针。而同期用Kotlin重写的页面,一次都没出过这问题。
和Java无缝混用,老项目也能渐进升级
最让我放心的是,Kotlin和Java能互相调用。我们现在的项目就是新模块用Kotlin,老代码不动。Gradle配置里加个插件,两个语言的代码放一块儿编译完全没问题。
就连Android Studio也原生支持,新建项目直接可以选Kotlin语言。Google从2017年就官方推荐了,现在主流开源库像Jetpack组件、Retrofit、ViewModel都优先适配Kotlin。
协程让异步更清爽
以前处理网络请求,回调套回调,代码容易变“面条”。Kotlin的协程用同步的方式写异步逻辑,看着清爽多了:
launch {
val data = async { fetchDataFromNetwork() }.await()
updateUI(data)
}
虽然刚开始对suspend函数和作用域有点懵,但看几个例子跑通后,确实比RxJava那种学习成本低不少。
也有小烦恼
不是说Kotlin就完美。编译速度比Java慢一点,特别是项目大了之后。另外有些老同事刚转过来,对扩展函数、高阶函数这些概念需要适应。但这些问题不影响整体体验,社区资料现在也挺全,遇到问题搜一下基本都能解决。
如果你正准备开始写安卓,或者想重构老项目,Kotlin确实是值得投入的选择。至少我现在写代码,感觉手指轻松了,bug也少了。