Kotlin 入坑半年总结

2017-07-08 00:43:01 +08:00
 sagaxu

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

优点

缺点

目前项目中一共有 200 多个 Java/Kotlin 代码文件,2/3 已经是 Kotlin 的了,估计半年后 Kotlin only 了。 下半年准备尝试用 coroutine 改造一下现有的多线程架构,3000 个线程已经限制到某些产品上的玩法了,异步回调的话又不太适合调用栈很深并且各种分支和跳转的业务,kotlin 的协程,可以直接 wrap 现有的异步的库,设计思路上很赞,充分利用现有的库。

kotlinjs 虽然正式发布了,但是 runtime 太大,而且我已经用 coffeescript 了,就没有尝试。

kotlin native 目前继续观望,也许明年会在合适的地方尝试一下,这也是个比较有趣的东西。

53411 次点击
所在节点    Kotlin
31 条回复
NullMan
2017-07-08 00:59:09 +08:00
既然是坑,那么永远就是坑。
0nlyy0u
2017-07-08 01:16:23 +08:00
对于新手来说,想学 android 还要再多学一门语言。
twm
2017-07-08 08:18:45 +08:00
以为说的是 scala
luban
2017-07-08 09:04:24 +08:00
感谢,最近想入坑 kotlin,上面说的 map,filter,java8 现在也有的
aristotll
2017-07-08 10:03:24 +08:00
有些人除了嘲讽别人的学习经验就不能说点其他的吗
nashxk
2017-07-08 10:08:12 +08:00
正在用 kotlin 改写 Android 项目,挺有意思的
azh7138m
2017-07-08 10:11:36 +08:00
你们上班怎么有这么多时间用来重构的。。。
zwpaper
2017-07-08 11:00:12 +08:00
能否问一下与 java8 的对比,有一些 java8 独有的特性,kotlin 是否支持?
sagaxu
2017-07-08 11:49:56 +08:00
@luban 的确,Java8 也有 map-filter,但是 Java 的 lambda 支持的比 Kotlin 差,函数式写法写起来罗嗦很多

@zwpaper 哪些是 Java8 独有的特性?除了 multi catch,不记得有什么 Kotlin 不支持的又比较方便的 Java 特性

@azh7138m 即便不用 Kotlin,也需要经常重构,把 bad smell 清理出代码库。迁移到 Kotlin 的时候,可以在比较大的版本发布时,每次夹带着转换掉几个 Java 文件。
lowzoom
2017-07-08 12:06:04 +08:00
3000 多个线程。。可以考虑用 AKKA
Lispre
2017-07-08 12:53:22 +08:00
谢谢分享,我这边也已经在项目中实践了, 目前项目已经上线,考虑到人员的情况,新的项目决定还是不能太急了,慢慢来
zwpaper
2017-07-08 12:59:22 +08:00
@sagaxu 我的意思是对比 7 的特性,准备入坑 java,但是项目里说是用了大量 8 的特性,所以问问 kotlin 与 8 的对比

顺便打听一下,新入坑 java,直接看 kotlin 可以吗?
sagaxu
2017-07-08 13:09:37 +08:00
@lowzoom 考量过 AKKA 和 vertx 还有 rxjava,这些库用来做底层通信协议是不错,处理复杂的业务逻辑的时候有点麻烦,状态个数比较多,不如 coroutine 方案来的直观和易于维护。而且迁移已有的阻塞型 Java 项目,用 coroutine 代价比较低,几乎不需要修改调用点之外的代码,之前甚至还考虑过用 Go 语言或者 elixir 重写,评估之后觉得成本太高,就等 Kotlin 1.2 发布了

@Lispre 的确不宜操之过急,使用小众语言很容易遭到同事抵制,对 HR 也不友好
sagaxu
2017-07-08 13:39:30 +08:00
@zwpaper Java 7 和 8 的特性,在 Kotlin 面前都不值一提,Java 9 都赶不上,可能 Java 10 可以跟现在的 Kotlin 比比。不过新入 JVM 坑,不建议直接学 Kotlin,因为几乎所有资料都是围绕 Java 的,至少得看得懂 Java。
nicevar
2017-07-08 13:52:25 +08:00
总结的不错,android 完全使用 kotlin 没啥问题了,好几个项目我都用了
服务器方面一个后台管理的项目我在用 querydsl 遇到点问题,上层的一个模块还是完全用 java 的,其他的都用 kotlin 了
notreami
2017-07-08 13:59:54 +08:00
作为一个 Kotlin 的坚定反对派(可以理解为老旧派的反抗)。
我就想问问:Kotlin 能带来什么?现代化编程带来的语法体验(写的爽,代码少)?还是安全检查?
如果只是这些,我觉得 java9 或者第三方类不久之后肯定能带来这些特性。没必要专门去折腾另一门体系不完整的编程语言想替代 java 原生,然后来吹嘘下,比 java 原生爽(顺带唱衰下,分分钟 oracle 把 Kotlin 收购了)。
我觉得有这时间折腾,还不如去学学 golang、javascript。全栈或者深入底层,都比这种今年火了下,可见的未来肯定只能打辅助的技能好( Scala 要不是绑上 Spark,一样是打辅助的)。
notreami
2017-07-08 14:01:23 +08:00
另外还有一个疑惑,android 代码里混入 java、Kotlin。构建工具是 gradle。然后 android 系是不是可以说,我们会三门编程语言:java8、Kotlin、Groovy
aristotll
2017-07-08 14:14:26 +08:00
@notreami oracle 要收购也是收购 jetbrain. Java 必然会带来新特效 (但是 Java 有强的历史包袱)
notreami
2017-07-08 14:37:03 +08:00
@aristotll 我觉得 java 有强历史包袱这个点问题不大,因为即使上了 Kotlin 还是需要会 java。
我更关注的点是,如果我们有一段时间,去掌握 Kotlin,还是去扩展技术栈掌握 golang 或 javascript,谁的价值更大。
sagaxu
2017-07-08 14:43:38 +08:00
@notreami 很遗憾,Java 9 并没有带来这些特性,第三方库也没法绕过语法限制。体系不完整是从什么角度评价的?

实际上 go 和 js 我也用,python 和 php 也用,学一门语言只是一个周末的时间,反正不加班,这点儿时间我还是有的。

在我正式开始用 Kotlin 的时候,搞安卓的都没几个人听说过 Kotlin 呢,今年突然火一把也是出乎我的意料。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX