00. Kotlin 安装和语言的基本组成

为什么要学 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 命令解释运行。

Java 程序运行过程

安装 Kotlin 集成开发环境

为了把 Kotlin 代码转译为字节码,编写 Kotlin 程序需要 JDK。所以这里先配置 JDK 环境。

1. 设置为 JAVA_HOME 变量
2. Path下添加 %JAVA_HOME%\bin

手动下载 Kotlin 编译器

https://github.com/JetBrains/kotlin/releases/ 之后设置两环境变量。

  1. 设置“变量名”设置为 KOTLIN_HOME,“变量值”设置为 Kotlin 编译器解压路径。
  2. 将 Kotlin 编译器下的 bin 目录追加到 Path 环境变量
1. 设置 KOTLIN_HOME
2. Path 下添加 bin

可以通过在命令提示行中输入 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!")
}
  1. Kotlin 代码通常在包中定义。包规范是可选的: 如果您没有在源文件中指定一个包,那么它的内容将转到默认包。
  2. Kotlin 应用程序的入口点是主要功能。自从 Kotlin 1.3 以来,您可以在没有任何参数的情况下声明 main。没有指定返回类型,这意味着函数不返回任何值。
  3. println 将一行写入标准输出。它是隐式导入的。还要注意分号是可选的。

编写和运行 Kotlin 程序有多种方式,总的来说可以分为:

  1. 交互式方式运行
  2. 编译为字节码文件方式运行

这里介绍 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 相关网址:

构建遇到问题

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"
}

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容