Kotlin笔记29——Kotlin的主要特征

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengxu_kuangrexintu/article/details/86517140

前言

在之前的Kotlin笔记中,我看网上的视频进行学习的,我个人觉得不够全面。于是我买了一本《Kotlin实战》进行学习。从这篇博客开始分享我看书的学习心得,希望能帮我看我博客学习Kotlin的小伙伴。

主要特征

  1. 目标平台:服务器端、Android及任何Java运行的地方;
  2. 静态类型;
  3. 函数式和面向对象;
  4. 免费并开源。

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的两个重要支持
  1. 对可空类型的支持,通过在编译期检测可能存在的空指针异常,让你可以写出更可靠的程序;
  2. 对函数类型的支持。

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。

猜你喜欢

转载自blog.csdn.net/chengxu_kuangrexintu/article/details/86517140