为什么要学 Kotlin
要想知道为什么 Kotlin 广受欢迎,首先要理解 Java 在现代软件开发领域中所扮演的角色。这两门语言联系得非常紧密,因为很多时候,Kotlin 代码的开发目标就是要在 Java 虚拟机上运行。
Java 语言比较稳健,久经考验。多年来,它一直是最常用的一种编程语言,造就了庞大的生产代码库。自从 1995 年 Java 问世以来,对于优秀的编程语言应满足什么条件,人们已通过实践积攒了很多经验教训。然而 Java 却裹足不前,开发者喜欢的很多现代语言高级特性,它都没有,或者迟迟才加入。
Kotlin 从这些经验教训中受益良多,而 Java(和其他语言,比如 Scala)中的某些早期设计却愈显陈旧。脱胎于旧语言,Kotlin 解决了它们的很多痛点,进化成了一门优秀的语言。相比 Java,Kotlin 进步巨大,带来了更可靠的开发体验。
作为一门新秀语言,Kotlin 不仅支持编写代码在虚拟机上运行,而且还是一门跨平台的通用型语言:你可以用 Kotlin 开发各种类型的原生应用,如 macOS 应用、Windows 应用、JavaScript 应用,当然还有 Android 应用。平台独立性意味着 Kotlin 有各种各样的用途。
Kotlin 语言特点
简洁、安全、支持函数式编程、支持面向对象、Java 具有良好的互操作性、免费开源。
1. Kotlin 对函数式编程的支持
函数式编程并不能完全取代面向对象编程,函数式编程擅长数据处理,如核心业务逻辑、算法实现等;而面向对象擅长构建 UI 界面编程、搭建系统架构等。
2. 异常处理的理念
Java 把异常分为受检查异常和运行期异常,编译器强制要求受检查异常必须捕获或抛出。事实上经过多年的实践,开发者发现即便是捕获了那些受检查异常处理起来也力不从心。受检查异常会使得程序结构变得混乱,代码大量增加。而 Kotlin 把所有的异常都看做是运行期异常,编译器不会强制要求捕获或抛出任何异常,开发人员可以酌情考虑是否捕获处理异常。
3. 对可空类型的支持
空指针异常是 Java 最为头痛的问题之一,Java 数据类型可以接收空值。而 Kotlin 数据类型默认不能接收空值,是非空数据类型,这样保证了数据类型的安全,防止空指针异常的发生。
Kotlin 应用程序运行过程
Java 程序运行过程如下图所示,首先由 Java 编译器将 Java 源文件编译成为 class 字节码文件文件),这个过程可以通过 JDK(Java 开发工具包)提供的 javac 命令进行编译。当运行 Java 字节码文件时,由 Java 虚拟机中的解释器将字节码解释成为机器码去执行,这个过程可以通过 JRE(Java 运行环境)提供的 java 命令解释运行。
安装 Kotlin 集成开发环境
为了把 Kotlin 代码转译为字节码,编写 Kotlin 程序需要 JDK。所以这里先配置 JDK 环境。
手动下载 Kotlin 编译器
https://github.com/JetBrains/kotlin/releases/ 之后设置两环境变量。
- 设置“变量名”设置为 KOTLIN_HOME,“变量值”设置为 Kotlin 编译器解压路径。
- 将 Kotlin 编译器下的 bin 目录追加到 Path 环境变量
可以通过在命令提示行中输入 kotlinc –version
指令进行验证是否安装成功。
IntelliJ IDEA
https://www.jetbrains.com/idea/
社区版免费, 企业版收费。
Eclipse
下载地址 https://www.eclipse.org/downloads/ + kotlin 插件。
运行 Kotlin 程序
运行 hello world
package org.kotlinlang.play
fun main() {
println("Hello, World!")
}
- Kotlin 代码通常在包中定义。包规范是可选的: 如果您没有在源文件中指定一个包,那么它的内容将转到默认包。
- Kotlin 应用程序的入口点是主要功能。自从 Kotlin 1.3 以来,您可以在没有任何参数的情况下声明 main。没有指定返回类型,这意味着函数不返回任何值。
- println 将一行写入标准输出。它是隐式导入的。还要注意分号是可选的。
编写和运行 Kotlin 程序有多种方式,总的来说可以分为:
- 交互式方式运行
- 编译为字节码文件方式运行
这里介绍 REPL 方式。
REPL 是英文 Read-Eval-Print Loop 缩写,直译为“读取-求值-输出”,它指代一种简单的交互式运行编程环境。REPL 对于学习一门新的编程语言具有很大的帮助,因为它能立刻对初学者做出回应。许多编程语言可以使用 REPL 研究算法以及进行调试。
启动 REPL 可以通过 Kotlin 编译器提供的 kotlinc
命令或 IntelliJ IDEA 工具中选择 Tools → Kotlin → Kotlin REPL 菜单。打开命令提示行输入 kotlinc 命令。
Kotlin REPL 提供一些前面带有冒号(:)的管理指令,例如 “:quit” 指令是退出 REPL,“:help” 指令是帮助。
kotlin 新特性
What's new in Kotlin 1.8.0
发布日期: 2022年12月28日
以下是它最大的亮点:
- JVM 的新实验函数: 递归复制或删除目录内容
- 改进了 Kotlin 反射性能
- New -Xdebug 编译器选项,以获得更好的调试体验
- Kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 合并到 kotlin-stdlib 中
- 改进的 Objective-C/Swift 互操作性
- 与 Gradle 7.3 兼容性
如何获得帮助
对于一个初学者必须要熟悉如下几个 Kotlin 相关网址:
- Kotlin 源代码网址:https://github.com/JetBrains/kotlin
- Kotlin 官网:https://kotlinlang.org/
- Kotlin 官方参考文档:https://kotlinlang.org/docs/reference/
- Kotlin 标准库:https://kotlinlang.org/api/latest/jvm/stdlib/
- Kotlin Examples: Learn Kotlin Programming By Example https://play.kotlinlang.org/byExample/overview
构建遇到问题
jvm 版本不一致
'compileJava' task (current target is 19) and 'compileKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.
解决
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
application
kotlin("jvm") version "1.8.0"
}
java.sourceCompatibility = JavaVersion.VERSION_1_8
java.targetCompatibility = JavaVersion.VERSION_1_8
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}