以前咱们学习过如何写一个简单的Android App。
为了遇上潮流,我特意去学习了下Jetbrains开发的新语言 —— Kotlinhtml
不想说太多的概念,总结出来就是 Swift on JVM
。
那么为何要用它呢,我喜欢它的理由不少:java
- 带来了Nullable Safe特性 —— 之后不再怕讨厌的 Null Pointer Exception了。
- 闭包闭包闭包 —— 重要的事情说三遍.
- Smart Type Case —— 很智能的一个特性,当你使用if检查是不是某种类型之后,自动转换为指定类型。
- 没有附加的Runtime —— iOSer 看到这会不会哭.
- Kotlin stdlib 很是小,打包后Apk的体积几乎没有变化,也不用担忧方法数超过限制。
总而言之,就是用极小的代价换来了咱们许多振奋人心的特性,那么你心动了么?
固然,在心动以前也要理智,咱们要知道Kotlin暂时尚未发布"正式版",一直在0.x.x
版本号中徘徊,若是你足够胆大(像我),那么你大能够一试。git
老规矩先补上官方文档传送门:http://kotlinlang.org/docs/reference/basic-syntax.htmlgithub
一些基本的语法如——基础类型、流程控制、类与继承等等特性咱们已经不陌生,咱们来看看几个新特性。算法
我翻译过来是空指针安全监测,什么意思呢?看下以下语法糖(Swift Developer能够直接跳过)
好比安全
var text:String? = null text?.length()
若是是java
代码,在text
变量为null
的时候,调用text.length()
是会崩溃滴,那么在这里,咱们用了?
来告诉编译器,若是text
为null
,则返回null
,不然返回text.length()
,具体翻译过来就是这样:闭包
if (text == null) { return null; } else { return text.length() }
看咱们少了这么多判断,这个语法糖是否是很棒?函数
介绍我最爱的闭包,那么在java 8如下的版本中,java是没有闭包这个特性的,举个例子,你的函数不能被当成一个对象使用,必须使用一个接口封装,而咱们使用Kotlin
就能够直接传函数当形参啦!性能
fun lock<T>(lock: Lock, body: () -> T): T { lock.lock() try { return body() } finally { lock.unlock() } }
此处咱们的body
形参就是一个0参数返回类型为T的函数,能够做为咱们的回调函数使用,而不用像java同样定义又臭又长的接口,再传入使用。学习
fun dfs(graph: Graph) { fun dfs(current: Vertex, visited: Set<Vertex>) { if (!visited.add(current)) return for (v in current.neighbors) dfs(v, visited) } dfs(graph.vertices[0], HashSet()) }
这是一个典型的dfs算法,使用Kotlin的高阶函数特性——能够在函数内定义函数。
智能类型转换,什么意思呢?show一段代码
if (str is String) { return str.length() } else if (str is Int) { return str.toString() }
咱们知道Int类型是没有length
这个方法的,也就是通过这个if判断,若是知足if条件的话,编译器自动帮咱们转换成咱们要的类型,而后供咱们调用。
我试着在SegmentFault for Android中加入对Kotlin
的支持,在加入Kotlin
的lib
先后,包大小并无明显增加(1M如下),性能亦没有下降,因此用户是感知不出来内部发生了什么变化。
综上所述,我要给Kotlin
点赞!
我把土豆记事全部的代码所有改为Kotlin
的实现,并开源到Github
上
https://github.com/geminiwen/tudounotepad
你们能够clone下来学习,也很是感谢你们对个人支持。
(顺便跪求各类star star star)