Kotlin 入坑半年总结

15234279-20893a9cc8d73b97.jpg

半年前我在一个两年历史的后端 Java 项目中,尝试着引入了 Kotlin,半年过去,证明了当时的尝试是值得的。分享一下我的感受。

优点

1.无缝引入到现有 Java 项目,只看了半天文档就上手了,并且没有因为两种语言混合开发带来副作用。
2.表达能力优于 Java,平均下来,在不影响可读性的情况下,大概可以比 Java 少写 1/3 的代码。
3.增加特性的同时,没有降低性能,部分 benchmark 中还有微弱的性能提升,马儿跑得更快还吃的更少。
4.适度的函数式编程支持,map-filter-fold 代替了一大堆 for-loop,简洁明了,代码中没有 map/list 构造工作干扰视线。
5.extension function 可以很方便的给现有的类扩充新的方法,而不用定义新类型,最常用的就是 TypeA.toTypeB()。
6.non-null 变量和 elvis 操作符,基本上消灭了 null 的烦恼,既不担心 NPE,又不用到处 if 判断是不是 null。
7.unchecked exception,可以自己决定在调用栈的某一层 catch 和处理,不必到处 try-catch 好麻烦。
8.val 和 var,在变量定义时决定它是否可以改变它的值,不能改变的值,是不用担心不小心覆盖的。
9.property 语法,不用让 IDE 自动生成 getter/setter 了,也不用 Lombok 自动合成这些方法了。
10.object,匿名对象信手拈来,并且编译器自动帮你搞成线程安全的 singleton。
11.delegate,和用它实现的 lazy evaluation,你甚至可以自行决定 lazy 求值在并发时的同步方式。
12.String Interpolation,"aaa{x.y}"是不是很面熟?多行字符串也很方便。
13.when/let/apply/also/takeIf 等等操作,可以实现非常简洁的操控,直接消除掉 builder 设计模式了。
14.imutable 的 list/set/map,imutable 是个很好的约束工具,默认就该 imutable。
15.REPL,就是类似 jshell 的那个东西,很方便,也很实用,比如直接命令行访问某个类。

缺点

1.符号S用于 String Interpolation,当前版本的 IDEA 无法正确处理 Value 注解中转义过的$。
2.spring-data 中 query builder 依赖的机制,目前不能方便的自动生成 Kotlin 的 Query Object。
3.资料还是偏少,不过官网的文档差不多也够了,毕竟大部分库和框架,都是沿用的 Java 的。
4.IDEA 自动转换工具,把 Java 转换成 Kotlin,转换质量明显比我人肉转的要差的多。
5.目前项目中一共有 200 多个 Java/Kotlin 代码文件,2/3 已经是 Kotlin 的了,估计半年后 Kotlin only 了。下半年准备尝试
6.用 coroutine 改造一下现有的多线程架构,3000 个线程已经限制到某些产品上的玩法了,异步回调的话又不太适合调用
7.栈很深并且各种分支和跳转的业务,kotlin 的协程,可以直接 wrap 现有的异步的库,设计思路上很赞,充分利用现有的库。

15234279-3a6190b88213cd23.jpg

免费获取Kotlin资料和更多安卓开发架构的资料(包括Fultter、高级UI、性能优化、架构师课程、 NDK、混合式开发(ReactNative+Weex)和一线互联网公司关于android面试的题目汇总可以加:936332305 / 链接:点击链接加入【安卓开发架构】:https://jq.qq.com/?_wv=1027&k=515xp64

猜你喜欢

转载自blog.csdn.net/weixin_33923762/article/details/87379866
今日推荐