1 fun max(a: Int, b: Int): Int {
2 if (a > b)
3 return a
4 else
5 return b
6 }
1 fun max(a: Int, b: Int) = if (a > b) a else b
1 fun parseInt(str: String): Int? {
2 // …
3 }
1 fun main(args: Array<String>) {
2 if (args.size < 2) {
3 print("Two integers expected")
4 return
5 }
6
7 val x = parseInt(args[0])
8 val y = parseInt(args[1])
9
10 // 由于x、y是null,所以使用 x * y 将产生错误。
11 if (x != null && y != null) {
12 // 在null检查后,x 和 y 自动地配置(cast)到非可null
13 print(x * y)
14 }
15 }
1 // ...
2 if (x == null) {
3 print("Wrong number format in '${args[0]}'")
4 return
5 }
6 if (y == null) {
7 print("Wrong number format in '${args[1]}'")
8 return
9 }
10
11 // 在null检查后,x 和 y 自动地配置(cast)到非可nul
12 print(x * y)
1 fun getStringLength(obj: Any): Int? {
2 if (obj is String) {
3 // 在这个分支中,`obj`自动转换到`String`
4 return obj.length
5 }
6
7 // 在类型检查分支之外,`obj`仍然是`Any`类型
8 return null
9 }
1 fun getStringLength(obj: Any): Int? {
2 if (obj !is String)
3 return null
4
5 // 在这个分支上,`obj`自动转换到`String`
6 return obj.length
7 }
1 fun getStringLength(obj: Any): Int? {
2 // 在`&&`右手边条件成立时,`obj`自动转换到`String`
3 if (obj is String && obj.length > 0)
4 return obj.length
5
6 return null
7 }