第1章Kotlin:定义与目的

882 阅读8分钟

第1章Kotlin:定义与目的.png

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 表达式image.png
      • ②、多线程安全

        • 多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据 。如果你使用的是不可变数据结构和纯函数,就能保证这样不安全的修改根本不会发生,也就不需要考虑为其设计复杂的同步方案
      • ③、测试更加容易

        • 函数式编程意味着测试更加容易。没有副作用的函数可以独立地进行测试,因为不需要写大量的设置代码来构造它们所依赖的整个环境
  • 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中的检查和转换被组合成了一次操作 : 一旦检查过类型,不需要额外的转换就能直接引用属于这个类型的成员

image.png

  • ④、互操作性

    • Java代码也可以毫不费力地调用 Kotlin 的代码
    • 最大程度上使用现有的java库

1.5、使用Kotlin工具

编译Kotlin代码

  • kotlin源码存放在.kt后缀的文件中

  • 编译器会分析源码生成.class文件

  • 使用kotlinc命令编译代码

    • kotlinc -include-runtime -d java Jar
  • kotlin构建过程的简单描述

image.png

开发工具

  • lntelliJ IDEA 和 Android Studio 插件

  • 在线 playground

  • 交互式 shell

    • 编译小段代码使用REPL
    • 如果你想快速地尝试小段的 Kotiin代码,可以使用交互式 shell(也叫 REPL) 在 REPL中,可以逐行地输入 Kotlin 代码并立即看到其执行结果, 可以使用不带任何参数的kotlinc命令启动REPL, 也可以从IntelliJIDEA的Kotlin”菜单中选 择启动 REPL
  • Eclipse 插件

Java 到 Kotlin 的转换器

1.6、小结

Kotlin是静态类型语言并支持类型推导,允许维护正确性与性能的同时保持源代码的简介

Kotlin支持面向对象和函数式两种编程风格,通过头疼函数使更高级别的抽象成为可能,通过支持不可变值简化了测试和多线程开发

在服务端应用程序中它工作得很好,全面支持所有现存的Java框架,为常见的任务提供了新工具,如生成HTML和持久化

在Android上它也可以工作,这得益于紧凑的运行时、对Android API特殊的编译器支持以及丰富的库,为常见的Android开发任务提供了Kotlin友好的函数

它是免费和开源的,全面支持主流的IDE和构建系统

Kotlin是务实的、安全的、简介的,与Java可互操作,意味着它专注于使用已经证明过的解决方案处理常见任务,防止常见的像NullPointerException这样的错误,支持紧凑和易读的代码,以及提供与Java无限制的集成

附件

第1章Kotlin:定义与目的.svg