# KOTLIN 必知必会

  • 为什么要优先使用 Kotlin 进行 Android 开发?
  • google 宣布 Kotlin-First 意味着什么?
  • 有哪些人都在使用 kotlin?
  • Kotlin 十问
  • Kotlin 必知必会的 7 大模块 —— 本章课程体系介绍

# Kotlin 是什么?

Kotlin 是一门用于现代多平台应用的静态编程语言,其中被广泛用于 Android 平台的开发,被称之为 Android 世界的 Swift。它由大名鼎鼎的 JetBrains 公司设计开发并开源,著名的 IDE 工具 IntelliJ IDEA 就是他们的产品,所以无疑他们是对编程语言设计领域最为熟悉的专家。

Kotlin 从 2016 年发布 1.0 的 release 版本开始至今,使用的开发者数量快速增长。

图片描述

此外 Kotlin 已经拥有强大的生态和社区开发者的支持:

  • Kotlin 是著名的 IDE 厂商 JetBrains 公司开发的编程语言
  • 在 Google I/O 2017 中,Google 宣布在 Android 上为 Kotlin 提供最佳支持
  • Kotlin 在 Spring5.0 后端开发框架中的支持
  • Kotlin DSL 1.0 将在 Gradle5.0 得以应用,Kotlin 成为继 Groovy 语言开发 Gradle 另一门编程语言
  • Kotlin 成为 2018 年 Github 中增长速度最快的语言
  • 2018 年 10 月,Google 和 JetBrains 在 KotlinConf18 上公开宣布了 Kotlin 基金会
  • 2019 年 5 月,谷歌宣布 Kotlin 作为 Android 的首选语言。
  • 2019 年 7 月,Kotlin 在 O’Reilly 开源软件大会(OSCON)2019 上赢得了享有声望的年度突破项目奖

# 为什么要优先使用 Kotlin 进行 Android 开发?

在 2019 年 Google I/O 大会上,google 宣布今后将优先采用 Kotlin 进行 Android 开发。

Kotlin 是一种新型的静态类型编程语言,不仅可以减少常见代码错误,还可以轻松集成到现有应用中。

下面介绍了开发者喜欢用 Kotlin 编写代码的原因:

Kotlin 主要优势的示意图

  • 富有表现力且简洁:可以使用更少的代码实现更多的功能。少编写样板代码。在使用 Kotlin 的专业开发者中,有 67% 的人反映其工作效率有所提高。
  • 更安全的代码:Kotlin 有许多语言功能,可帮助避免 null 指针异常等常见编程错误。包含 Kotlin 代码的 Android 应用发生崩溃的可能性降低了 20%。
  • 可互操作:可以在 Kotlin 代码中调用 Java 代码,或者在 Java 代码中调用 Kotlin 代码。Kotlin 可完全与 Java 编程语言互操作,因此可以根据需要在项目中添加任意数量的 Kotlin 代码。
  • 结构化并发:Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。

# Kotlin 优先意味着什么?

在构建新的 Android 开发工具和内容(例如 Jetpack 库、示例、文档和培训内容)时,google 会在设计层面考虑到 Kotlin 用户

Java 语言Kotlin
平台 SDK 支持
Android Studio 支持
Lint
== 引导式文档支持
API 文档支持
AndroidX 支持
AndroidX Kotlin 特有 API(KTX、协程等)
在线培训尽力而为
示例尽力而为
多平台项目
Jetpack Compose

# Kotlin 能做什么?

如果对 Kotlin 的能力仅仅停留在 JVM 平 台,那是片面的。如今的 Kotlin 已经从当初的更好 Java 目标完成了它华丽的大变身,他们的目标已经瞄准了星辰大海。目前 Kotlin 可以适用于移动端跨平台、原生 JVM、服务端开发、Web 开发、Android 开发、数据科学等多个领域。此外近年来 Kotlin 团队已经将重心转移到了语言层面的跨平台,多平台的支持。

图片描述

Kotlin 得益于 Kotlin/JVM、Kotlin/JS、Kotlin/Native 三个语言编译器的后端实现,它不仅仅可以编译成 Java 字节码(Kotlin/JVM),也可以编译成 JavaScript (Kotlin/JS),还能编译成直接运行在不需要任何 VM 平台的机器代码(Kotlin/Native),可以轻松实现语言层面的跨平台,并实现在多个平台之间共享代码。目前已经部分支持了 Linux、Windows、macOS、WebAssembly、Android、iOS 以及 watchOS 和 tvOS 平台

图片描述

# 我们也使用 Kotlin!

已有超过 60% 的专业 Android 开发者选择使用 Kotlin,排名前 1000 位的 Android 应用中有 80% 包含 Kotlin 代码。我们的工具和资源可为 Kotlin 提供一流的支持。实际上,Android 开发采用 Kotlin 优先方法。

目前有超过 60 款 Google 应用都是使用 Kotlin 构建的。这包括 Google 地图、Google Home、Play、Google 云端硬盘和 Google 信息等应用。其中一个成功案例来自 Google Home 团队,他们将新功能开发工作迁移到 Kotlin 后,代码库大小减少了 33%,NPE 崩溃次数减少了 30%。

kotlin-apps

# Kotlin 十问

# Android 为何将 Kotlin 语言列为一级支持语言?

Kotlin 是一种与 Android 兼容的语言,它不仅语法简洁、更具表达性,还具备类型安全和空值安全的特性。它与 Java 语言可以无缝互通,热爱 Java 语言的开发者可以在继续使用 Java 语言的同时,逐步加入 Kotlin 代码并充分利用 Kotlin 库,轻松完成转换。此外,许多 Android 开发者已经发现 Kotlin 不仅可以提高开发速度,还能为编程带来更多乐趣,因此,我们希望为这些 Kotlin 用户提供更好的支持。详细了解 Android 的 Kotlin 优先方法

# 如何在 Android Studio 中使用 Kotlin?

Android Studio 完全支持 Kotlin。Android Studio 的所有新版本都支持使用 Kotlin 文件创建新项目、将 Java 语言代码转换成 Kotlin 代码、调试 Kotlin 代码等操作。

# 如何在 Android Studio 中调试 Kotlin 代码?

Kotlin 代码的调试方法与 Java 代码相同。不需要执行任何其他操作。

# Kotlin 前景如何?

JetBrains 开发的 Kotlin 语言有着深思熟虑的设计理念,这是我们采纳该语言的原因之一。Google 正在与 JetBrains 开展合作,确保开发者在整个开发过程中(从语言到框架再到工具)都能获得出色的体验。

# 如何在 Java 和 Kotlin 语言之间做出选择?

无需二选一!可以根据需要同时使用两种语言。极力推荐使用 kotlin.

# 我可以在 Kotlin 中调用 Android 或其他 Java 语言库的 API 吗?

可以。Kotlin 与 Java 语言具有互操作性。此设计让 Kotlin 代码可以透明地调用 Java 语言方法;对于 Kotlin 独有的功能,可采用注释轻松向 Java 代码公开。 对于未使用任何 Kotlin 特有语义的 Kotlin 文件,Java 代码可以直接引用,无需添加任何注释。两相结合,就可以同时使用 Java 代码和 Kotlin 代码。

# 我可以在同一个项目中同时使用 Java 文件和 Kotlin 文件吗?

可以。可以根据自己的喜好或多或少采用 Kotlin 语言进行开发。java 和 kotlin 可以同时存在,可以混编开发。

# 如何将 Kotlin 代码添加到我的现有项目中?

Project 窗口中选择相应模块,然后依次选择 File > New,选择任意 Android 模板,然后将 Kotlin 选作 Source language

# 如何将 Java 语言代码转换成 Kotlin 代码?

打开 Java 文件,然后依次选择 Code > Convert Java File to Kotlin File。也可以新建一个 Kotlin 文件 (File > New > Kotlin File/Class),然后将 Java 代码粘贴到该文件中。界面上出现提示时,点击 Yes 即可将 Java 代码转换成 Kotlin 代码。

# 使用 Kotlin 会影响性能吗?

使用 Kotlin 不会对性能产生直接影响,但就像使用 Java 语言一样,应该仔细考虑如何使用这种语言。例如,在新的集合实例间重复复制会影响 GC 性能,调用允许非 null 类型的方法会导致调用 null 值检查方法(当然,可以在编译器中使用 -Xno-param-assertions 停用运行时 null 值检查)。

# Kotlin 必会必知

  • Kotlin 的基本语法和代码规范 ;
  • Kotlin 的面向对象;
  • Kotlin 的函数式编程;
  • 扩展函数 ;
  • 空指针类型安全 ;
  • 类型系统;
  • 泛型和型变 ;
  • 注解和反射 ;
  • Kotlin 在 Android 中的实际应用开发。

kotlin-members

# 总结几条学习 Kotlin 的建议?

  • 如果有 Java 编程基础,记住千万不要用 Java 编程思维来写 Kotlin 代码,换句话说不要硬生生把 Java 代码转化成 Kotlin 代码来写,更需要换个思维想如果用 Kotlin 某个语法糖实现的话更优呢,否则将无法真正体会 Kotlin 这门语言精髓;
  • 记住要善于使用 Kotlin 中的反编译代码插件,就是将 Kotlin 代码反编译成 Java 代码。这是一条非常重要和实用的建议,通过它将会真正看透 Kotlin 语法糖背后原理,从而更高效地使用它;
  • 学会经常去看 Kotlin 源码实现,其实 Kotlin 源码很短的,当知道如何使用某个语法,更需要知道它背后原理以及善于总结它适用的场景;
  • 最后就是多多实践,最好是自己弄个实际的项目,从 0 到 1 全部使用 Kotlin 开发,每天一点一点给它舔砖加瓦,通过它来学习每一个 Kotlin 语法技能点。

# 关于 Kotlin 的一些干货资料

  • Kotlin 官网
  • Kotlin 中文站
  • Kotlin 中文社区
  • Kotlin 中文博客
  • Kotlin Weekly
  • Medium kotlin-academy 博客