阿拉丁和灯

Thoughts, stories and ideas.



Java程序员的惊喜之旅——Kotlin游览攻略


Kotlin是啥

Kotlin是一门语言,一门JVM上的,以完美Java互操作,简洁,易读,安全,通用为设计目标的,同时支持面向对象和函数式两种编程范式的,高质量的现代静态类型语言;或者换一句话说,是集成了Java(面向对象,强大生态),C#(美妙的扩展方法),Ruby(魔法般的Code Block),Scala(函数式编程,克制的运算符重载,易用版Trait)等众多语言优点的高性能的美妙语言。*

同时它也是一个小岛,气候宜人,景色优美,对于程序员有特别的吸引力,尤其适合Java程序员放松身心,享受编程的快乐。

我看到了你怀疑的眼神,没错,我完全理解你作为一个Java高手的挑剔和怀疑。没关系,本文就是一个旅游地图,带你游览这个美丽的小岛,美丽的语言。有没有这么好,看完你自己判断。

第一眼美女

首先,Kotlin第一眼就能让你惊艳。不相信?83行代码拯救我——上代码,让JetBrains的首席语言设计者带我们感受下Kotlin语言的精炼和强大的表达能力,请戳视频:

How to Kotlin - from the Lead Kotlin Language Designer (Google I/O '18)

不想戳?截个图再次提醒你看视频

[看完了吗?没看完上面请不要往下看]
看了上面这个视频,你应该会有点心动,但是也会有很多疑问,比如:Kotlin的语法这么灵活,性能会不会差?Kotlin和现有的Java生态,比如Spring系列框架整合怎么样?Kotlin跟TypeScript有点像,能用来开发前端吗?跟大热的Reactive又是什么关系,对反应式编程的支持怎么样?

下面就一一打消你的顾虑

安身立命之本——互操作性和Java生态

Kotlin语言以100%的Java互操作性为目标。换句话说,Kotlin可以跟Java完美无缝集成,你可以在一个项目里面,100个类都是Java,另外一个类用Kotlin,完全没有任何问题。也可以一点一点地把你的Java类转换到Kotlin,做到渐进无缝平滑切换。

因为Kotlin与Java的完美互操作性,Spring框架不经修改就可以直接用于Kotlin。但是如果想要利用Kotlin的一些特性,来进一步让Spring用起来更爽,那么就需要做一点工作。下面这个视频展示了Kotlin跟SpringBoot的良好集成,以及Spring正在做的工作,加强对Kotlin语言特性的支持:

KotlinConf 2017 - Why Spring Loves Kotlin by Sebastien Deleuze

免费的午餐——性能无损

Kotlin的性能会不会有损失,其强大而又灵活的语言特性是否有性能上的代价?你不是第一个担心的。看这个视频,你就会有答案。

KotlinConf 2017 - The Cost of Kotlin Language Features by Duncan McGregor

不想看视频?答案就俩字:没有!Kotlin的性能总体与Java相当。

DSL——去敌人的地盘吃鸡

Kotlin因为其灵活的语法(比如可以重定义运算符),适合用来写DSL,比如用Kotlin写HTML模板;也可以用来写测试框架;甚至,跟Python PK一下,用于数据科学方面的开发和分析。下面这些视频展示了Kotlin在这些方面的应用。

Web开发
Type-Safe Web with Kotlin

前端开发
KotlinConf 2017 - How to Build a React App in Kotlin by Dave Ford

数据科学方面
KotlinConf 2017 - Kotlin for Data Science by Thomas Nield

DSL的应用——Spek单测框架
KotlinConf 2017 - Testing Kotlin at Scale: Spek by Artem Zinnatullin

终极Boss——反应式编程

说到反应式编程,最近也很热。反应式编程是一头大象,不同的人从不同视角看到不同的东西。其实,对于了解了函数式编程,熟悉Java 8的函数式编程三剑客 Future / Optional / Stream 的人来说,反应式编程不过就是是一个很简单的概念,一句话总结就是:函数式的异步流编程,加上支持反压处理(下游可以通知上游,以应对下游处理速度跟不上的情况),再加上把这个概念进一步推广到服务与服务之间,而不仅限于一个应用之内。完毕!你已经了解了反应式编程的本质了。请叫我雷锋。

所以,反应式编程的三要素:1. 函数式的编程风格,2. 异步流处理和反压支持,3. 跨服务的尺度上应用前两者。

在这三个要素当中,Kotlin在1和2上都有完美的支持。1不用说了,Kotlin有对函数式编程的完善支持。对于2,你也可以用Kotlin调用RxJava和Reactor程序,进行反应式开发,但是,Kotlin提供了比RxJava API更加强大同时易用的武器:Kotlin Coroutine。让你可以方便地不用改变编程风格就可以进行异步流开发,同时支持反压处理。具体怎么做呢?请看视频:

这个是Kotlin Coroutine的开发者在KotlinConf 2017上专门介绍coroutine的视频,专业视角,包你满意:

KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov

看得很爽,想要更多?想看点刺激的内部实现?这是第二部:

KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov

结论

不用掩藏,你一定动心了。那么就来进行一趟美妙的Kotlin之旅吧,真实体验一下这个美丽的小岛,这个美妙的语言。

资源

一个在线IDE,在线编写和运行Kotlin,有自动代码提示哦(Ctrl+空格)
https://try.kotlinlang.org/

最好的Kotlin教学课程
Kotlin Fundamentals - by PluralSight

官方文档
http://kotlinlang.org/docs/reference/server-overview.html



View or Post Comments