0%

Kotlin Basic Chapter Five

Kotlin学习笔记

函数简化

使用 = 连接返回值

1
2
fun area(width: Int, height: Int): Int = width * height
fun sayHi(name: String) = println("Hi " + name)

参数默认值

1
fun sayHi(name: String = "world") = println("Hi " + name)

命名参数

在参数较多时用于指定参数具体是哪一个,方便阅读和查找

1
sayHi(name = "Ryan")

字符串

字符串模板

1
2
3
val name = "world"
println("Hi $name")
println("Hi ${name.length}")

raw string (原生字符串)

1
2
3
4
5
6
7
8
val name = "world"
val myName = "kotlin"
val text = """
Hi $name!
My name is $myName.\n
"""
println(text)
//\n 并不会被转义,输出的内容与写的内容完全一致

条件控制

if/else

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 传统用法
var max = a
if (a < b) max = b

// 使用 else
var max: Int
if (a > b) {
max = a
} else {
max = b
}

// 作为表达式
val max = if (a > b) a else b

val max = if (a > b) {
println("max:a")
a //返回 a
} else {
println("max:b")
b //返回 b
}

when

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
when (x) {
1 -> { println("1") }
2 -> { println("2") }
else -> { println("else") }
}
//when 也可以作为表达式进行使用
val value: Int = when (x) {
1 -> { x + 1 }
2 -> { x * 2 }
else -> { x + 5 }
}
//多重条件用,号隔开
when (x) {
1, 2 -> print("x == 1 or x == 2")
else -> print("else")
}
//使用 in 检测是否在一个区间或者集合中
when (x) {
in 1..10 -> print("x 在区间 1..10 中")
in listOf(1,2) -> print("x 在集合中")
// not in
!in 10..20 -> print("x 不在区间 10..20 中")
else -> print("不在任何区间上")
}

//使用 is 进行特定类型的检测
val isString = when(x) {
is String -> true
else -> false
}
//布尔表达式
when {
str1.contains("a") -> print("字符串 str1 包含 a")
str2.length == 3 -> print("字符串 str2 的长度为 3")
}

for

使用for遍历

1
2
3
4
5
6
7
8
val array = intArrayOf(1, 2, 3, 4)
for (item in array) {
...
}

for (i in 0..10) {
println(i)
}

try-catch

1
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }

?. 和 ?:

1
2
3
4
5
6
7
//使用?.表示可空数据,使用Elvis 操作符?:来表示结果为空返回:后面的数据
val str: String? = "Hello"
val length: Int = str?.length ?: -1

fun validate(user: User) {
val id = user.id ?: return //验证 user.id 是否为空,为空时 return
}

== 和 ===

  • == :可以对基本数据类型以及 String 等类型进行内容比较,相当于 Java 中的 equals
  • === :对引用的内存地址进行比较,相当于 Java 中的 ==
    1
    2
    3
    4
    5
    6
    7
    8
    val str1 = "123"
    val str2 = "123"
    println(str1 == str2) //内容相等,输出:true

    val str1= "字符串"
    val str2 = str1
    val str3 = str1
    print(str2 === str3) //引用地址相等,输出:true
如果你觉得有用,可以请我喝杯茶