If表达式

Kotlin没有三元运算符,因为它的if/else不仅是条件判断语句,也是一个表达式,有返回值,完全可以替代三元运算符。

var age = 30
var name = if (age > 30) "中年" else "青年"

if/else的分支可以是代码块,最后的表达式作为该块的值:

var name = if (age > 30) {
    println("我是中年啦,体力不支了")
    "中年"
} else {
    println("我还是很年轻,精力很充沛哦")
    "青年"
}

When表达式

Kotlin没有switch,也不需要,因为when表达式足够强大了。

var cup = 'A'
var say = when(cup){
    'A' -> "一般般啦"
    'B' -> "还不错哦"
    'C' -> "哇!哇!"
    'D' -> "我的天哪!"
    else -> "有点眼晕!"
}

when的分支条件可以是任意表达式,而不只是常量。

var weight = 110
when(weight){
    // in可以判断一个值是否在一个区间之内
    in 100..110 -> println("正常")
    in 120..140 -> println("微胖")
}

For循环

for 循环可以对任何提供迭代器(iterator)的对象进行遍历,比如数组和集合。对一个区间进行遍历:

for (i in 1..3) {
    println(i)
}
//向下递减遍历,每次减2
for (i in 10 downTo 0 step 2){
    println(i)
}

如果要遍历一个数组,可以这么做:

var arr = arrayOf("A", "B", "C")
for (i in arr.indices){
    println(arr[i])
}

在Kotlin中我们一般只用for循环遍历区间,而不去遍历数组和集合;因为数组和集合有更强大的forEach方法:

arr.forEach { println(it) }

While循环

Kotlin仍然支持while循环和do..while循环。

var i = 5
while(i > 0){
    println(i)
    i--
}
do {
    //retry() //重试请求
} while (i > 0)

中断与返回

一个典型的例子是在嵌套for循环中,如果想中断外层循环,可以这么做:

out@ for (i in 1..100) {
    for (j in 1..100) {
        if (j>10) break@out
    }
}

再看一个容易让人迷惑的例子,在一个方法中的for循环内部进行返回,默认返回的是方法:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return // 返回的是foo()的调用
        print(it)
    }
    println("这个打印根本到不了。")
}

这个设计是Kotlin有意为之的,也是合理的,因为这种逻辑场景下我们大多数都希望直接返回函数调用。如果真的想返回forEach循环可以这么做:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach // 返回的是foo()的调用
        print(it)
    }
    println("这个打印可以执行到。")
}
更新时间: 6/1/2019, 11:25:02 AM