Kotlin 初认识
想写这个教程有三个原因,一是 Kotlin 作为一种新兴的编程语言,优点实在是太多,值得花时间学习掌握;二是 Kotlin 作为新兴的语言,各种教程和资料相当不完善,我作为 Kotlin 的喜爱者,也想为 Kotlin 的发展贡献自己的力量;三是因为我在学习 Kotlin 时,被各种特性搞得焦头烂额,所以想写个更加有条理、更清晰易懂的 Kotlin 教程。
好了,闲话少叙,让我们开始 Kotlin 学习之路吧!
1. Kotlin 是什么?
知乎有个格言“先是是不是,再问为什么”,想了解一件事件,首先得了解它是什么、从哪里来的,再才能谈其他的。想学 Kotlin,我们先看看它到底是什么:
Kotlin 是由 JetBrains 开发团队设计的基于 JVM 的静态型别编程语言,也可以被编译为 JavaScript 源代码。
这里有几个重点:
基于 JVM:JVM 就是 Java Virtual Machine,Java 虚拟机。原来 Java 虚拟机不只是 Java 语言的虚拟机,只要文件格式满足 JVM 对编译文件的要求,就能在它上面运行,所以说只要能编译成符合要求的 Java 字节码,任何语言都能在 Java 虚拟机上运行。这同时也说明,Kotlin 是一种编译型语言,它需要先编译成字节码,再在 JVM 上运行。
静态型别:什么是静态型别?维基百科的解释是:“如果一个编程语言的类型检查,可在不测试运行时期表达式的等价性的情况下进行,该语言即为静态类型的。”一般来说有编译这个执行过程的语言,基本都是静态类型;而不需要编译的解释型语言,一般都是动态类型。从类型的强弱来看,Kotlin 是一种强类型的语言,拥有与 Java 类似的类型系统。
JavaScript 支持:从 Kotlin 1.1 开始,Kotlin 完全支持 JavaScript 平台的所有语言功能,但因为 JVM 不支持弱类型语言,所以用于 JVM 的 Kotlin 代码不能直接用在 JavaScript 平台上。而且因为我不懂 JavaScript,所以有关 JavaScript 的内容本专栏将不予介绍 ( )
2. Kotlin 和 Java 是什么关系?
如果说 Java 是 C++--,那么 Kotlin 可以说是 Java++-~~
相比较 Java,Kotlin 增加了许多特性,比如 Java 8 之前没有的 Lambda 表达式、When 表达式、扩展函数、高阶函数…… 还有一堆一堆的关键字……
相比较 Java,Kotlin 去除了一些特性,比如 final 关键字、静态变量、静态方法、空指针异常等;
相比较 Java,Kotlin 封装了许多过程和表示方法,那些在 Java 中需要一大堆代码的东西,在 Kotlin 中只需要几行。
Kotlin 没有完全取代 Java 语言的野心,它用一种巧妙的方式让自己骑上了 Java 这只巨兽,利用 JVM 平台上丰富的类库迅速发展。
一方面,它是一种新兴的现代编程语言;另一方面,它又与 Java 有完善的互操作性,完善到可以直接在 Kotlin 代码中随便插入 Java 语句(反正最后都要编译成字节码~),同样可以在 Java 代码中调用 Kotlin 语言写成的函数和类库。
凭借与 Java 语言完全兼容的特性,学习 Kotlin 的成本相当低,你完全可以先用 Kotlin 语言写项目中的非核心代码,熟练掌握后再用 Kotlin 语言重写其他 Java 语言的部分,最终把整个项目迁移到 Kotlin 平台上来。
3. Kotlin 有哪些与众不同的特点?
主要特点前面介绍得差不多了,这里总结一下 Kotlin 语言里其他的特点:
从 Kotlin 开始学习函数式编程:早在 Java 8 的 Stream API 之前,Kotlin 就已经走上函数式编程的路了,通过函数式编程,你的代码将变得简洁而有效。在学习和使用 Kotlin 语言的旅程中,相信你会在一次又一次的惊艳里领略函数式编程的魅力;
只写简洁的代码:Java 的语法糖太少了!Kotlin 封装了 Java 里那些冗长而易错的代码,用一个又一个语法糖压缩你的代码。不过语法糖太多,一时可能难以消化,如果遇到吃不下去的语法糖,不妨试试用回 Java 代码哦。
清楚地声明每一个要素:在 Kotlin 里,只有声明为 open 的类才能被继承,只有声明为 open 的方法才能被重写,子类重写父类方法时,必须加上 override 关键字;声明变量时,只有用 var 声明的变量才是“可变的量”,声明为 val 的变量则相当于 Java 中用 final 修饰的常量。这里就体现出 Kotlin 的哲学了:对于可能产生混淆的地方,都要明确地指定可能混淆的要素,尽量避免不必要的混乱。