初识Kotlin

Kotlin是一门什么样的语言

Kotlin是一个基于JVM的新的编程语言,由JetBrains开发。JetBrains,是目前广受欢迎的Java IDE IntelliJ的提供商,Kotlin是一门开源的语言,在Apache许可下已经开源其Kotlin编程语言。

Kotlin 既具有面向对象又具有函数式结构。你既可以按 OO 风格也可以按 FP 风格使用,还可以混合使用两种风格。它是基于面向对象的语言,但和其他很多现代语言那样,使用了很多函数式编程的概念, 比如高阶函数、函数类型和 lambda 表达式等。

Kotlin和Java的联系

Kotlin的出现不是为了取代Java, 而是在兼容java的基础上对java做了很多补充,特别是语法上的增强,就像Kotlin官网强调的:“100% interoperable with Java”。
借用知乎上点赞很高的一段话:
Kotlin始终坚持与java很高的兼容性,大量使用Java Api和类库,不够用再自己扩展,把臃肿的java代码包装成简单的语句,同时添加很多像类型推断、扩展、空安全等强大并实用的语法增强。
Kotlin对Java开发者最大的改变不是在减少在写代码时间上,而是一系列思维方式的转变:

与其让开发者手动控制循环,不如把循环封装在类库内部

三段式for循环和while循环可能是bug和复杂代码的元凶;

面向对象,但不能被类和对象困住手脚,把函数解放出来
每一行代码都用到刀刃上,尽量减少代码模版和多余声明
编程语言要设计好“默认配置”,引导开发者使用“默认配置”

比如类默认不可继承,访问控制符默认public,集合默认只读,类型默认不为null等

不变对象优于可变对象

多用val少用var,多用只读集合少用可变集合,多用非空类型少用可空类型;

类要回归本心,只承担抽象对象的功能

Kotlin鼓励多使用扩展,少在类里塞一堆API和实现,尽量采用 “类基本框架+外部扩展功能函数“的模式;

Kotlin的优缺点

优点:

提高生产力
语言紧凑、清晰、高效,语法简洁直观。Kotlin 可以显着提高团队效率:编写和部署新代码所需的时间较少。

与现有代码兼容
Kotlin 的优点之一是其 100% 的 Java 互操作性。该语言适用于 Java 本身,及所有相关工具和框架,提供了丰富的生态系统。这也使得可以选择逐渐迁移到 Kotlin ,或者在同一个项目中同时使用这两种语言。

安全
彻底告别那些烦人的 NullPointerException——著名的十亿美金的错误
Kotlin 可以保护你避免对可空类型的误操作,并且如果你检查类型是正确的,编译器会为你做自动类型转换。

更加人性化的语法糖
刚接触Kotlin不到一周,我已经被它各种语法糖吸引,写代码增加很多乐趣。

IDE支持
因为Kotlin是JetBrains团队开发的,而且Android studio又是在Intel Idea社区版的基础上开发的,所以Kotlin一出生就有顶级IDE厂商的支持,用Kotlin官网的一句话:一门语言需要工具化,而在 JetBrains,这正是我们做得最好的地方。

缺点

一些开发者反馈的信息:

编译速度变慢
因为Kotlin会自动生成很多代码

注解处理的问题
如果在项目中使用Dagger,PermissionsDispatcher,DeeplinkDispatch,Databinding等大量使用注解的三方库,需要使用kapt来做annotation proccessing,开发过程中也会遇到些报错和bug;

增加方法数量
过多的方法数量会导致编译速度变慢。kotlin通过闭包,内联函数等可以显著减少代码的总行数,但它可能也会增加编译后的方法数量。

Android开发者,切换到Kotlin开发,需要做哪些事情

因为Kotlin和Java完全兼容,所以对于java开发者,学习Kotlin的曲线不会特别陡峭;
Android Studio3.0版本以后内置Kotlin插件,android项目中Kotlin和java两种文件可以并存和互相转换,所以切换到Kotlin开发的成本是比较低的。建议android开发者使用第三方库的时候提前调查这些库是否支持Kotlin,使用Kotlin会不会有很难修复的问题。
最后贴上推荐的学习资料,对初学者而言,官方资料虽没有细致入微的讲解,但却是最准确的参考资料。
Kotlin 入门宝典