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