【笔记】Kotlin学习笔记

前言

Kotlin学习笔记

下载依赖

MacOS

1
brew install kotlin

查看版本

1
kotlinc -version

编译

Main.kt:Kotlin源码
Main.jar:Java可执行文件

1
kotlinc Main.kt -include-runtime -d Main.jar

注释

1
// 单行注释
1
2
3
/*
多行注释
*/
1
2
3
/**
* 文档注释
*/

主函数

Main.kt
1
2
3
fun main(args: Array<String>) {
...
}

行末分隔符

  • 使用;作为行末分隔符,单行代码可以省略,多行代码写在同一行必须添加
1
println();println()

输出语句

1
println("文本内容")

格式化输出

1
println("$变量名")

输入语句

1
var 变量名: String = readln()

变量

声明变量

1
var 变量名: 数据类型

定义变量

1
var 变量名: 数据类型 = 值

自动类型推导

1
var 变量名 = 值

常量

定义常量

1
val 变量名: 数据类型 = 值

数据类型

整型

1
var 变量名: Int = 0
类型 描述 取值范围 值表示方法
UByte 无符号8位整数 0~255 0u
UShort 无符号16位整数 0~65535 0u
UInt 无符号32位整数 0~4294967295 0u
ULong 无符号64位整数 0~18446744073709551615 0u0uL
Byte 有符号8位整数 -128~127 0
Short 有符号16位整数 -32768~32767 0
Int 有符号32位整数 -2147483648~2147483647 0
Long 有符号64位整数 -9223372036854775808~9223372036854775807 0L

自动类型推导

推导为Int
1
var 变量名 = 0
推导为Long
1
var 变量名 = 0L
推导为ULong
1
var 变量名 = 0uL

二进制数

  • 0b开头
1
var 变量名 = 0b1

八进制数

  • 在Kotlin语言中不能直接表示八进制数据

十六进制

  • 0x开头
1
var 变量名 = 0xF

区间

闭区间
1
var 变量名 = 1..10
1
var 变量名: IntRange = 1..10
半开区间
  • 左闭右开
1
var 变量名 = 1 until 10
1
var 变量名: IntRange = 1 until 10

浮点型

1
var 变量名: Double = 0.0
类型 描述 值表示方法
Float 32位浮点型数 0.0f
Double 64位浮点型数 0.0

单精度浮点型

1
var 变量名: Float = 0.0f

双精度浮点型

1
var 变量名 = 0.0
1
var 变量名: Double = 0.0

布尔型

1
var 变量名 = true
1
var 变量名 = false

字符型

1
var 变量名 = 'a'
1
var 变量名: Char = 'a'
1
var 变量名: Char = '\u0061'

字符串

1
var 变量名 = ""
1
var 变量名: String = ""

原始字符串

  • 原始字符串会保留空白字符、换行符、制表符
  • 原始字符串会忽略字符串中的转义字符
1
var 变量名 = """字符串"""
模板字符串
  • 模板字符串会将其他变量值插入到字符串中
1
2
var s = ""
var str = "${s}字符串"
  • 如果插入变量左右有空格,可以省略{}
1
2
var s = ""
var str = "$s 字符串"

为数据类型定义别名

1
typealias 别名 = 数据类型

长数字分隔符

英式数字分隔法

1
var oneBillion = 1_000_000_000

中式数字分隔法

1
var oneBillion = 10_0000_0000

应用于二进制数

1
var binary = 0b0000_0000

应用于十六进制数

1
var hexadecimal = 0xFFFF_FFFFu

运算符

算术运算符

  • +-*/(整除)、%(取余)、++(自增)、--(自减)

赋值运算符

  • =+=-=*=/=%=

关系运算符

  • ==><>=<=!=

逻辑运算符

  • &&||!

按位运算符

  • shl(有符号数左移)、shr(有符号数右移)、ushr(无符号数右移)、and(按位与)、or(按位或)、xor(按位异或)、inv(按位取反)

将1左移1位

1
var 变量名 = 1 shl 1
1
var 变量名 = 1.shl(1)

将1按位取反

1
var 变量名 = 1.inv()

包含运算符

  • in(包含)、!in(不包含)
1
var 变量名 = 1 in 1..10
1
var 变量名 = 1 !in 1..10

分支语句

if

1
2
3
if (布尔表达式) {
...
}
1
2
3
4
5
if (布尔表达式) {
...
} else {
...
}
1
2
3
4
5
if (布尔表达式) {
...
} else if (布尔表达式) {
...
}
1
2
3
4
5
if (布尔表达式) {
if (布尔表达式) {
...
}
}

省略大括号

  • 当语句块只有一条语句时,可以省略大括号
1
2
if (布尔表达式)
...
1
2
3
4
if (布尔表达式)
...
else
...
1
2
3
4
if (布尔表达式)
...
else if (布尔表达式)
...
1
2
3
if (布尔表达式)
if (布尔表达式)
...

返回值

1
2
3
4
5
var 变量名 = if (布尔表达式) {
返回值
} else {
返回值
}

when

1
2
3
4
5
6
7
8
9
10
11
when (变量名) {
1 -> {
...
}
2 -> {
...
}
else -> {
...
}
}

判断范围

1
2
3
4
5
6
7
8
9
10
11
when (变量名) {
in 范围 -> {
...
}
in 范围 -> {
...
}
else -> {
...
}
}

省略大括号

  • 当代码块只有一个表达式时,可以省略大括号
1
2
3
4
5
when (变量名) {
1 -> 表达式
2 -> 表达式
else -> 表达式
}

返回值

1
2
3
4
5
var 变量名 = when (变量名) {
1 -> 返回值
2 -> 返回值
else -> 返回值
}

循环语句

for

遍历可迭代对象

1
2
3
for (变量名 in 可迭代对象) {
...
}

遍历区间

从小到大

1..10:区间

1
2
3
for (变量名 in 1..10) {
...
}

step 1:步长,缺省值为1

1
2
3
for (变量名 in 1..10 step 1) {
...
}
从大到小
1
2
3
for (变量名 in 1 downTo 10) {
...
}
1
2
3
for (变量名 in 1 downTo 10 step 1) {
...
}

while

1
2
3
while (布尔表达式) {
...
}

do…while

1
2
3
do {
...
} while (布尔表达式)

continue

  • 通过continue跳出当前循环
1
2
3
for (变量名 in 1..10) {
continue
}
  • 通过continue跳出指定循环
1
2
3
4
5
循环名@ for (变量名 in 1..10) {
for (变量名 in 1..10) {
continue@循环名
}
}

break

  • 通过break跳出整个循环
1
2
3
for (变量名 in 1..10) {
break
}

完成

参考文献

哔哩哔哩——青空の霞光