有木有对 Kotlin 感兴趣的?

2016-11-28 09:18:52 +08:00
 androidwing

Kotlin 对比 Java 不得不说太爽了。在学习之余,想分享给大家,并且给感觉无从下手的朋友们一个参考。

所以用 Kotlin 开发了一个 App ,并且用了主流的框架:

MVP+Dagger2+Databinding+Rxjava+Retrofit+Okhttp3

感兴趣的可以看看哈~ 保证 Kotlin 让你爽翻天。

https://github.com/githubwing/GankClient-Kotlin

11070 次点击
所在节点    Kotlin
45 条回复
cuebyte
2016-11-28 11:56:18 +08:00
@androidwing @lqs Java 语法的确繁琐, Stream 也是很别扭。但是如果 kotlin 并没能提供更好的机制和特性,那就没有特别的理由去学习,因为这门“新”语言除了增加了学习成本,并没有其他新颖之处。大不了多用用 lombok 。

恕我直言,我觉得 kotlin 之于 java ,可能还不如 coffee 之于 javascript ,更不用说 es2016 、 typescript 了。
barryhappy
2016-11-28 12:20:47 +08:00
整体来说,我是很喜欢 Kotlin 的,如果我自己开始一个小项目的话,我会更倾向于使用 Kotlin 而不是 Java 。

我写过对 Kotlin 的一些看法~
[为什么要使用 Kotlin ?]( http://www.jianshu.com/p/c4750300b862)

* 简洁、优雅
* null 安全
* 函数、属性扩展
* 兼容 Java
* 工具完善
raysonx
2016-11-28 12:31:37 +08:00
挺有意思的语言
xingda920813
2016-11-28 12:52:43 +08:00
为什么不用 Scala ?个人认为 Kotlin 只是阉割版的 Scala 而已,基本是 Scala 的一个子集。 Kotlin 的优点(代码简洁,与 Java 100% 互操作性, ...)基本 Scala 都有,但 Scala 的很多特性 Kotlin 不具备:隐式转换,反射调用,高阶类型,存在类型,协变 / 逆变, Macro ,模式匹配。
xingda920813
2016-11-28 12:54:05 +08:00
Kotlin 的语言设计很多地方看得出借鉴 Scala 、 Swift 的痕迹,例如变量、参数的类型是后置的。
lqs
2016-11-28 12:56:14 +08:00
@cuebyte 用半天时间就能把 Kotlin 用熟(因为库都是 JRE 自身的),第二天工作效率的提升省下的时间已经能超过这半天的学习时间了
cuebyte
2016-11-28 12:57:40 +08:00
@xingda920813 如果是从后端角度来说的话: 1. 难,学习成本高,也费脑子; 2. 代码风格难统一,能写出 Java 风格也能写出 FP 风格;

但这个帖子里大多都是 Android 开发者…… Scala 能比 Kotlin 更方便地开发安卓么
cuebyte
2016-11-28 13:01:39 +08:00
@lqs 半天就能用熟么……厉害了,半天的话一个库我都用不来。

我看了一会儿觉熟悉语法就要花好几天时间,概念相近又很容易和 Java 搞混,把代码写错。
maomaomao001
2016-11-28 13:10:03 +08:00
@cuebyte 可是它根本没有增加学习成本啊~~~ 1 , 2 天,或者 3 , 4 天
ccjeaty
2016-11-28 13:11:24 +08:00
暂时还没用过 @ts25504 这玩意儿是 jb 搞出来的嘛, 理论上 ide 支持应该 ok 的啊.
maomaomao001
2016-11-28 13:12:13 +08:00
@cuebyte 真的是半天~~
murmur
2016-11-28 13:21:09 +08:00
@barryhappy kotlin 兼容 java 但是语法完全不像 java 啊
xingda920813
2016-11-28 13:22:55 +08:00
@cuebyte 1.Scala 作为一门特性较多的语言,学习曲线较为陡峭,这是对的。但其实学习一门新的语言,就是期望工作效率的提升能够 cover 掉学习的时间。 Kotlin 的语法与 Java 差别较大,跟 Scala 反而有点像。而 Kotlin 一样需要学习。 2.这是 OO 与 FP 混合语言的必然结果,除非是 Java 纯 OO 或者 Haskell 纯 FP ,否则代码中很难避免命令式与函数式两种编程风格并存。 这点 Kotlin 和 Scala 是一样的。

只是想说用 Kotlin 不如用 Scala ,目前我们用 Scala 开发 Android , Kotlin 只在 1 个周边工具中用到。项目中用到了很多 Kotlin 不具备的特性。例如 Scala 的隐式转换, Double 被转换为一个自定义的 MyDouble ,里面有一个 dp 方法,将 dp 数转成 px ,我想表达 48 dp 代表多少 px ,只需要像字面上一样在代码中写下『 48 dp 』就可以了,语义非常直观。

判断一个集合是不是空集,其他语言可能没有办法只用一个函数实现,因为 List, Set, Map 没有一个公共的父类或实现相同的接口,但他们都有 isEmpty 方法, Scala 的反射调用可以 def isEmpty(o: {def isEmpty: Boolean}) = o == null || o.isEmpty 只要 o 有一个 isEmpty 方法就可以了,并不要求 o 的类型。

所以说更方便几乎是一定的,因为 Scala 几乎可以说是 Kotlin 的超集, Kotlin 有的 Scala 都有。
murmur
2016-11-28 13:24:55 +08:00
求不要再吹语法特性 这是个最大的谎言 如果语法特性真那么重要 c#为啥不比 Java 火?
啥时候用 kotlin ?等安卓全转 kotlin 并宣布不更新 java 版之后 5 年吧
现在多少安卓还在跑 4.x 呢 升 6 都遥遥无期别说 7 了
cuebyte
2016-11-28 13:25:50 +08:00
@xingda920813 受教了,敢问贵司开发的 Android 应用是什么?学习学习。
xingda920813
2016-11-28 13:26:09 +08:00
另外 Scala 的集合系统也是一大亮点,支持的函数式操作非常多,远比 Java 8 的 Stream 丰富。
cuebyte
2016-11-28 13:33:26 +08:00
@xingda920813 想问一下,听说在标准库方面, clojure 是把 java 已有的直接拿来用, scala 是自己重新写。然后现在也有 scala-naitive 这个东西。想问问在你看来其中的优势与潜在的缺点都有哪些?
CodingPuppy
2016-11-28 13:52:44 +08:00
之前使用 Databinding 配合最新的 kotlin 插件会报错,只能使用旧版本的 kotlin 插件,问下楼主,现在稳定了么
msputup
2016-11-28 13:53:25 +08:00
v2ex 的某个安卓客户端也是 kotlin 实现的。
xingda920813
2016-11-28 13:58:44 +08:00
Clojure 不了解。 Scala 的标准库的集合部分把 Java 的重新发明了一遍,其他新加了一些方便使用的类,如元组让函数可以便捷地返回 2 个值, Source 类让网络请求或文件读取简略为 1 句话。

但它的集合分为可变和不可变两种,不可变集合每次操作都会产生一个新的集合, 然后把原来的集合丢弃掉,占用空间和效率方面会差一点,不可变集合与 Java 中的比较相似, Scala 分别针对它们做效率上的优化,例如不可变集合添加一个元素时,返回的新集合会复用前 n - 1 个元素的空间,不会拷贝一次到新集合里。另外他的集合操作兼顾了 OO 和 FP 两种风格,既有 map, flatMap, filter, collect 等 FP 风格的操作符,也有 OO 风格的 take, takeRight (返回头 n 个或 尾 n 个)等操作符。

另外,不同于 Kotlin 这种因为 Java 原始类型有很多弊端就一刀切的都用 kotlin.* 类不同, Scala 虽然也是 scala.Int ,但他在运行期会尽量是一个 JVM 上的原始 int ,尽量避免装箱以提高性能。同时 Int 可以被隐式转换为一个 RichInt ,提供了很多实用的方法,这是性能与实用性兼顾的例子。

Scala 自己重新写的优势我感觉是不把人当傻子吧,不是限定使用一种方式完成一件事。而是提供很多选择给你自己选,然后分别对每一种进行特定的优化,集合和对待原始类型的态度就是例子。

缺点是可能有运行时开销和体积的 overhead , Scala 被编译为 Java 字节码,受限于 Scala 在 JVM 上的实现方式,生成的 class 文件众多,每个 class 里面自动生成的方法也比 Java 多很多。另外 Scala 的标准库体积过大。这两点在 Android 上其实很致命(有 ProGuard 会好一点)。

scala-native 看起来很不错,能够在 bare metal 上运行 Scala ,感觉如果成熟的话应该会很厉害。这样 Scala 就有了编写接近底层的一些东西的可能性。

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

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

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

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

© 2021 V2EX