前言
在之前的Kotlin笔记中,我看网上的视频进行学习的,我个人觉得不够全面。于是我买了一本《Kotlin实战》进行学习。从这篇博客开始分享我看书的学习心得,希望能帮我看我博客学习Kotlin的小伙伴。
主要特征
- 目标平台:服务器端、Android及任何Java运行的地方;
- 静态类型;
- 函数式和面向对象;
- 免费并开源。
1.目标平台:服务器端、Android及任何Java运行到的地方
Kotlin的首要目标是提供一种更简洁、更高效、更安全的替代Java的语言,并且适用于现今适用Java的所有环境【有点小意外,之前就有听说Kotlin是想要替代Java的开发语言,很有野心,表示对书中的知识很感兴趣】。Kotlin常见的运用场景有:
- 编写服务器端代码(典型的代表是Web应用后端);
- 创建Android设备上运行的移动应用(这个博主本人深有体会,我有用Kotlin写一些小Demo,身边朋友有用Kotlin开发Android应用的)。
2.静态类型
Kotlin和Java一样是一种静态类型的编程语言。这意味着所有的表达式的类型再编译期已经确定了。而编译期就能验证对象是否包含了你想访问的方法和字段。
另一方面,与Java不同的是,Kotlin不需要你在源代码中显式地声明每个变量的类型。
Java显式,举例:
int i = 1;
Kotlin在很多情况下,变量类型可以根据上下文来自动判断,这样就可以节省大量类型声明的代码。Kotlin变量声明举例:
val i = 1
解析:
在声明这个变量时,由于变量初始化为整型值,Kotlin自动判断出它的类型是Int。
编译器这种从上下文推断变量类型的能力被称作类型推导。
静态类型带来的好处:
- 性能——方法调用速度更快,因为不需要在运行时才来判断调用的是哪个方法;
- 可靠性——编译器验证了程序的正确性,因而运行时崩溃的概率更低;
- 可维护性——陌生代码更容易维护,因为你可以看到代码中用到的对象的类型;
- 工具支持——静态类型是IDE能提供可靠的重构、精确的代码不全以及其他特性。
Kotlin的两个重要支持
- 对可空类型的支持,通过在编译期检测可能存在的空指针异常,让你可以写出更可靠的程序;
- 对函数类型的支持。
3.函数式和面向对象
函数式核心概念:
- 头等函数——把函数(一小段行为)当做值使用,类似于JavaScript的函数,可以变量保存它,把它当作参数传递,或者当作其他函数的返回值;
- 不可变性——使用不可变对象,这保证了它们的状态在其创建之后不能再变化;
- 无副作用——使用的是纯函数。此类函数在输入相同时会产生相同的结果,并且不会修改其他对象的状态,也不会和外面世界交互。
函数式编程的第一个好处:简洁。 举例:
fun findAlice() = findPerson{ it.name == "Alince" }
解析:
findPerson()包含了寻找一个人的公共逻辑
花括号中代码块识别出你要找的人
函数式编程的第二个好处:多线程安全。 多线程程序中最大的错误来源就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据。上面有提到函数式的不可变性和无副作用,这两个核心概念就体现了函数式保证不安全的修改是不会发生的,也就是不需要考虑为其设计复杂的同步方案。
Kotlin拥有丰富的特性集从一开始就支持函数式编程的风格,包括:
- 函数类型,允许函数式接受其他函数作为参数,或者返回其他函数;
- lambda表达式,让你最少的样板代码方便传递代码块;
- 数据类,提供了创建不可变值对象的简明写法;
- 标准库中包含了丰富的API集合,让你用函数式编程和风格操作对象和集合。
Kotlin允许你使用函数式编程风格但并没有强制你使用它。当你需要的时候,可以使用可变数据,也可以编写带副作用的函数,而且不需要跳过任何多余的步骤。
4.免费并开源
Kotlin语言(包括编译器、库和所有相关工具)是完全开源的,并且可以自由使用。它采用Apche2许可证;其开发过程完全是公开在GitHub(https://github.com/jetbrains/kotlin)上,有兴趣的同学可以去贡献代码。如果你要开发Kotlin相关的程序,有三种开源IDE供你选择:IntelliJ IDEA、Android Studio和Eclipse完全支持Kotlin。