初见Kotlin
Posted 图灵教育
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初见Kotlin相关的知识,希望对你有一定的参考价值。
本文写于2017年3月16日,由图灵社区用户2gua原创。
文章最初发布在他的博客上:http://www.2gua.info/post/53
前段日子Kotlin发布了1.0版,号称android界的Swift,一副拯救苦逼Android码农于水火中的架势。那么它有何神奇之处呢?经过一段时间的摸索,Kotlin在我眼中定位为“通吃型”语言,服务端不是问题,还能生成javascript,另外又有针对Android开发的增强服务特性。
Kotlin一出世就被拿来跟Scala比较,恰巧Scala也是我喜欢的一门JVM语言。其实,我个人感觉Kotlin并非Scala的小弟,只是说有了val和var的表象,给许多开发者这种感觉,但要这么说的话,Scala的函数/方法定义用def而Kotlin却用fun这又怎么说呢?此外,Kotlin的伴生对象跟Scala中的概念也区别不小。另一种说法是Kotlin比Scala简单,也许Kotlin尚未实现Scala中我喜欢的yield功能,但要从发展角度来看,Kotlin出道时间短,后续要添加的功能应该会层出不穷。Kotlin的用法并不简单。要说“骨子里”的像,我宁愿觉得Kotlin更像Java:
号称“100% interoperable with Java™”:使用一段时间的感受是,写着写着,就有可能不知不觉中无缝地使用Java代码风格,写完了才恍然大悟……
一方面Kotlin添加了大量函数式风格,它的map、filter等操作比Java 8 Stream 的来得简洁直接。但隐约感受得到,这只是Kotlin特性中表面且很小的一部分,涉及过多的功能需求时,还是要寻求Java的特性支持。这点不像Scala,Scala是能不用Java原生特性就不用,而Kotlin则是需要用时你用就是了。不知道这是好事还是坏事,但终究看个人偏好吧,对于Java底子较好或较适应Java风格的开发者来说,这则是一个不错的起点。
上面是我觉得有必要澄清的一些概念。而以下则是Kotlin吸引我研究下去的一些因素:
Null Safety:别小看这一点,强迫症真能防范大量潜在问题。
Extension Functions:很喜欢这个特性,即开即用的感觉。
JetBrains家的东西,还是有些功底的,更重要的是跟闻名遐迩的自家开发工具必然结合紧密。
充分考虑Android平台开发的环境及特性适配,也难怪称为“Android开发的Swift”。
与Java的互操作性:也许会让大票开发者不感冒,但对我来说再好不过。
以下是Kotlin的一些限制,当然也只是我个人的一些看法:
稳定性:尚待提高,特别是REPL工具,动不动就导致退出REPL环境。此外,代码中的空行及注释都会在REPL中引发异常。
文档:官方文档比较初级,且资源不多。
普及率:小众。TIOBE从上月起已经纳入了Kotlin的观察,首月排名貌似158位。
整个感受,用这个示例实现来解释最恰当不过了:
给一个自定义日期类添加Comparison、Range及For迭代功能。
测试代码:
结论:
刚好现在看到一个开发者的困惑:“Kotlin让我感到不安。它离开Java 能玩得起吗 ?”我觉得Kotlin发展的前提是不离开Java,这个前提没了,估计Scala、Clojure一样没戏——Kotlin本身就是Java形态的增强与补充!
该不该学习Kotlin?——Kotlin就是一门语言,不是什么“十全大补丸”,但其现在面临的最急迫任务就是普及与推广,至少要达到Groovy、Scala或Clojure等“同门师兄弟”的地位,虽然这些个JVM语言的排名也不是很高。“该不该学”这个问题真没有答案。总之,它就是一门新兴的语言而已。
另一篇高人气文章:
Android
第一行代码——Android(第2版)
Android编程权威指南(第2版)
高性能Android应用开发
Java
Java 8实战
Java性能权威指南
图解设计模式
Groovy程序设计
Scala程序设计(第2版)
【阅读原文】查看作者博客
以上是关于初见Kotlin的主要内容,如果未能解决你的问题,请参考以下文章
KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
KotlinKotlin 常用表达式 ( range 范围表达式 | when 条件表达式 | 字符串模板 )
KotlinKotlin 变量与常量 ( 变量声明 | 只读变量 | 类型推断 | 编译时常量 | Kotlin 字节码查看面板 | Kotlin 引用数据类型 )