1.1、 Kotlin是什么
针对Java平台的新编程语言
Kotlin简洁、安全、务实,专注于Java代码的互操作性
Kotlin是一种在Java虚拟机上运行的静态类型编程语言,被称之为Android世界的Swift,由JetBrains设计开发并开源
在Google I/O 2017中,Google宣布Kotlin成为Android官方开发语言
1.2、Kotlin主要特征
1、目标平台:服务端、Android以及任何Java运行的地方
-
Kotlin的首要目标是提供一种更简洁、更高效、更安全的替代Java的语言,并且适用于现今使用Java的所有环境
-
Kotlin最常见的应用场景有
- 编写服务器端代码(典型的代表是Web应用后端)
- 创建Android设备上运行的移动应用
- 也可以使用Intel Multi-Os Engine让Kotlin代码运行在IOS设备上
- 也可以使用Kotlin和TornadoFX以及JavaFX一起来构建桌面应用程序
- Kotlin还可以编译成JavaScript,允许你在浏览器中运行Kotlin代码
2、静态类型的编程语言
-
区别
-
静态类型编程语言
- 编译时检查数据类型,即写程序时要声明所有变量的数据类型
- Java,C,C++,Kotlin
-
动态类型编程语言
- 运行时检查数据类型,即写程序时不需要声明变量的数据类型,它会在赋值的时候将变量的数据类型保存下来
- Python
-
-
Kotlin和Java一样是一种静态类型的编程语言
-
这意味着所有表达式的类型在编译器已经确定了,而编译器就能验证对象是否包含了你想访问的方法或者字段
-
这与动态类型的编程语言形成了鲜明的对比。动态类型编程语言在JVM上的代表包括Groovy和JRuby,这些语言允许你定义可以存储任何数据类型的变量,或者返回任何数据类型的函数,并在运行时才解析方法和字段引用。这会减少代码量并增加创建数据结构的灵活性,但它的缺点是,在编译器不能发现像名字拼写错误这样的问题,继而导致运行时的错误
-
另一方面,与Java不同的是,Kotlin不需要你在源代码中显式地声明每个变量的类型,很多情况下,变量类型可以根据上下文来自动判断,这样就可以省略类型声明
-
这里有一个最简单的例子
- val x=1
-
在声明这个变量时,由于变量初始化为整型值,Kotlin自动判断出它的类型是Int,编译器这种从上下文推断变量类型的能力被称作类型推导
-
-
静态类型的好处
-
性 能
-
方法调用速度更快
- 不需要在运行时才来判断调用的是哪个方法
-
-
可靠性
- 编译器验证了程序的正确性,因而运行时崩溃的概率更低
-
可维护性
- 陌生代码更容易维护,因为你可以看到代码中用到的对象的类型
-
工具支持
- 静态类型使 IDE 能提供可靠的重构、精确的代码补全以及其他特性
-
3、函数式和面向对象
-
函数式编程核心概念
-
①、头等函数
- 把函数( 一小段行为)当作值使用, 可以用变量保存它,把它当作参数传递, 或者当作其他函数的返回值
-
②、不可变性
- 使用不可变对象,这保证了它们的状态在其创建之后不能再变化
-
③、无副作用
- 使用的是纯函数。此类函数在输入相同时会产生同样的结果 ,并且不会修改其他对象的状态, 也不会和外面的世界交互。
-
-
函数式编程风格的代码的好处
-
好处
-
①、简洁
-
函数式风格的代码比相应的 命令式风格的代码 更优雅、更简练,因为把函数当作值可以让你获得更强大的抽象能力,从而避免重复代码。
- 假设你有两段类似的代码,实现相似的任务(例如,在集合中寻找 一个匹配的 元素)但具体细节略有不同(如何判断元素是匹配的)。可以轻易地将这段逻辑中公共的部分提取到一个函数中,并将其他不同的部分作为参数传递给它 。这些参数本身也是函数,但你可以使用一种简洁的语法来表示这些匿名函数,它被称作 lambda 表达式
- 假设你有两段类似的代码,实现相似的任务(例如,在集合中寻找 一个匹配的 元素)但具体细节略有不同(如何判断元素是匹配的)。可以轻易地将这段逻辑中公共的部分提取到一个函数中,并将其他不同的部分作为参数传递给它 。这些参数本身也是函数,但你可以使用一种简洁的语法来表示这些匿名函数,它被称作 lambda 表达式
-
-
②、多线程安全
- 多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据 。如果你使用的是不可变数据结构和纯函数,就能保证这样不安全的修改根本不会发生,也就不需要考虑为其设计复杂的同步方案
-
③、测试更加容易
- 函数式编程意味着测试更加容易。没有副作用的函数可以独立地进行测试,因为不需要写大量的设置代码来构造它们所依赖的整个环境
-
-
-
Kotlin支持的函数式编码风格
-
函数类型
- 允许函数接受其他函数作为参数,或者返回其他函数
-
lambda表达式
- 让你用最少的样板代码方便地传递代码块
-
数据类
- 提供了创建不可变值对象的简明语法
-
标准库
- 标准库中包括了丰富的 API集合,让你用函数式编程风格操作对象和集合
-
4、对可空类型的支持
- 通过在编译期检测可能存在的空指针异常,它让你可以写出更可靠的程序
5、免费并开源
1.3、Kotlin应用
Kotlin使用的两个主要领域是服务器端和Android开发
服务端的Kotlin
-
服务端编程的概念,包含应用程序类型
- 返回HTML页面给浏览器的Web应用程序
- 通过Http暴露Json Api的移动应用后台服务
- 通过RPC协议互相通信的微服务
-
Kotlin优势
-
与Java代码的无缝互操作性
-
Kotlin对构建器模式的支持让你可以使用更简洁的语法来创建任何对象图
- 一个最简单的用例就是HTML生成库,它可以把一个外部模板语言替换成简洁且完全类型安全的解决方案
-
持久化框架
-
Android上的Kotlin
- 让android开发体验变得高效和愉悦
- 更好的应用可靠性
1.4、Kotlin的设计哲学
当谈起 Kotiin 的时候,我们喜欢说它是一门
务实、简洁和安全的语言,专注于互操作性
-
①、务实
-
②、简洁
-
③、安全
-
在JVM上运行已经提供了许多安全保证
- 内存安全,防止了缓冲区溢出以及其他错误的动态内存分配造成的问题
-
保证了应用程序的类型安全,不需要指定所有的类型声明,许多情况下编译器会自动地推断出类型
-
空类型的支持
-
提供了许多便利的方法来处理可控数据
-
有助于避免异常类型ClassCastException
- Kotlin中的检查和转换被组合成了一次操作 : 一旦检查过类型,不需要额外的转换就能直接引用属于这个类型的成员
-
-
④、互操作性
- Java代码也可以毫不费力地调用 Kotlin 的代码
- 最大程度上使用现有的java库
1.5、使用Kotlin工具
编译Kotlin代码
-
kotlin源码存放在.kt后缀的文件中
-
编译器会分析源码生成.class文件
-
使用kotlinc命令编译代码
- kotlinc -include-runtime -d java Jar
-
kotlin构建过程的简单描述
开发工具
-
lntelliJ IDEA 和 Android Studio 插件
-
在线 playground
-
交互式 shell
- 编译小段代码使用REPL
- 如果你想快速地尝试小段的 Kotiin代码,可以使用交互式 shell(也叫 REPL) 在 REPL中,可以逐行地输入 Kotlin 代码并立即看到其执行结果, 可以使用不带任何参数的kotlinc命令启动REPL, 也可以从IntelliJIDEA的Kotlin”菜单中选 择启动 REPL
-
Eclipse 插件