想写这个教程有三个缘由,一是 Kotlin 做为一种新兴的编程语言,优势实在是太多,值得花时间学习掌握;二是 Kotlin 做为新兴的语言,各类教程和资料至关不完善,我做为 Kotlin 的喜好者,也想为 Kotlin 的发展贡献本身的力量;三是由于我在学习 Kotlin 时,被各类特性搞得焦头烂额,因此想写个更加有条理、更清晰易懂的 Kotlin 教程。html
好了,闲话少叙,让咱们开始 Kotlin 学习之路吧!git
知乎有个格言“先是是否是,再问为何”,想了解一件事件,首先得了解它是什么、从哪里来的,再才能谈其余的。想学 Kotlin,咱们先看看它究竟是什么:github
Kotlin 是由 JetBrains 开发团队设计的基于 JVM 的静态型别编程语言,也能够被编译为 JavaScript 源代码。编程
这里有几个重点:eclipse
由 JetBrains 团队开发:这个 JetBrains 就是那个开发 Intellij IDEA 的公司,所以安装 Intellij IDEA 时会自动安装 Kotlin 开发插件,能够直接用来开发 Kotlin 项目。除此以外,Kotlin 在 Eclipse 上也有对应的开发插件,安装方法见这里。编程语言
基于 JVM:JVM 就是 Java Virtual Machine,Java 虚拟机。原来 Java 虚拟机不仅是 Java 语言的虚拟机,只要文件格式知足 JVM 对编译文件的要求,就能在它上面运行,因此说只要能编译成符合要求的 Java 字节码,任何语言都能在 Java 虚拟机上运行。这同时也说明,Kotlin 是一种编译型语言,它须要先编译成字节码,再在 JVM 上运行。ide
静态型别:什么是静态型别?维基百科的解释是:“若是一个编程语言的类型检查,可在不测试运行时期表达式的等价性的状况下进行,该语言即为静态类型的。”通常来讲有编译这个执行过程的语言,基本都是静态类型;而不须要编译的解释型语言,通常都是动态类型。从类型的强弱来看,Kotlin 是一种强类型的语言,拥有与 Java 相似的类型系统。函数式编程
JavaScript 支持:从 Kotlin 1.1 开始,Kotlin 彻底支持 JavaScript 平台的全部语言功能,但由于 JVM 不支持弱类型语言,因此用于 JVM 的 Kotlin 代码不能直接用在 JavaScript 平台上。并且由于我不懂 JavaScript,因此有关 JavaScript 的内容本专栏将不予介绍 ( )函数
若是说 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 平台上来。
主要特色前面介绍得差很少了,这里总结一下 Kotlin 语言里其余的特色:
从 Kotlin 开始学习函数式编程:早在 Java 8 的 Stream API 以前,Kotlin 就已经走上函数式编程的路了,经过函数式编程,你的代码将变得简洁而有效。在学习和使用 Kotlin 语言的旅程中,相信你会在一次又一次的惊艳里领略函数式编程的魅力;
只写简洁的代码:Java 的语法糖太少了!Kotlin 封装了 Java 里那些冗长而易错的代码,用一个又一个语法糖压缩你的代码。不过语法糖太多,一时可能难以消化,若是遇到吃不下去的语法糖,不妨试试用回 Java 代码哦。
清楚地声明每个要素:在 Kotlin 里,只有声明为 open 的类才能被继承,只有声明为 open 的方法才能被重写,子类重写父类方法时,必须加上 override 关键字;声明变量时,只有用 var 声明的变量才是“可变的量”,声明为 val 的变量则至关于 Java 中用 final 修饰的常量。这里就体现出 Kotlin 的哲学了:对于可能产生混淆的地方,都要明确地指定可能混淆的要素,尽可能避免没必要要的混乱。
做者:CNife连接:https://zhuanlan.zhihu.com/p/26443556