Java转Kotlin:分支表达式

241 阅读2分钟

控制流语句是决定程序执行方向的重要语句。

Java中的控制流语句有

  • if...else...
  • switch...case...
  • try...catch...
  • 三元表达式
  • 等等

Kotlin中的控制流语句有

  • if...else...
  • when...
  • try...catch...
  • 等等

在Kotlin中,控制流语句不仅仅是控制程序走向,同时还是表达式,有自己的返回值,被称为分支表达式。

if...else...

在Java中,if...else...是常见的控制流语句:

//Java
public static void main (String[] args) {
    int a = 4;
    boolean isPositive = (a > 0);
    int b;
    if (isPositive) {
        b = a;
    } else {
        b = -a;
    }
}

在Kotlin中,可以同Java一样,仅用作控制流语句:

//Kotlin
fun main() {
    var a = 4
    var isPositive = (a > 0)
    var b = 0
    if(isPositive){
        b = a
    }else{
        b = -a
    }
}

同时,在Kotlin中我们还能将if...else...作为一个表达式,类似于三元表达式:

//Kotlin
fun main() {
    var a = 4
    var isPositive = (a > 0)
    var b = if (isPositive) a else -a
}

注意!当if...else...用作控制流语句时,两个分支应该是语句;当用作表达式时,两个分支应该是值或者表达式,而不是一个语句。

when...

在Java中,当基于同一个变量的控制流分支过多时,可以使用switch...case...

//Java
public class Example {
    public static void main(String[] args) {
        int a = 4;
        int b;
        switch (a) {
            case -10:
                b = 10;
                break;
            case 0:
                b = 0;
                break;
            case 10:
                b = 10;
                break;
            default:
                b = a;
        }
    }
}

在Kotlin中,没有switch...case...语句,取而代之的是when...语句:

//Kotlin
fun main() {
    var a = 4
    var b = 0
    when (a) {
        -10 -> b = 10
        0 -> b = 0
        10 -> b = 10
        else -> b = a
    }
}

在Kotlin中,不需要break关键字来跳出每一个case的执行,默认就有break的效果,同时,默认的关键字不再是default而是else

同时,上面的语句也可以写作一个表达式:

//Kotlin
fun main() {
    var a = 4
    var b = 0
    b = when (a) {
        -10 -> 10
        0 -> 0
        10 -> 10
        else -> a
    }
}

if...else...相同,要注意什么时候在分支用语句,什么时候在分支用表达式!

另外,when...语句还能将条件转移到分支

//Kotlin
fun main() {
    var a = 4
    var b = 0
    when {
        a == -10 -> b = 10
        a == 0 -> b = 0
        a == 10 -> b = 10
        else -> b = a
    }
}

如图所示,当when后面不跟传入参数的时候,表示条件判断直接在分支进行判断。同样也可以写成分支表达式:

//Kotlin
class Example {
    fun main() {
        var a = 4
        var b = 0
        b = when {
            a == -10 -> 10
            a == 0 -> 0
            a == 10 -> 10
            else -> a
        }
    }
}

从Kotlin 1.3开始,我们还能在when的传入参数处进行控制台输入:

//Kotlin
class Example {
    fun main() {
        var b = 0
        b = when(val a = readLine()) {
            null -> 0
            else -> a.length
        }
    }
}

try...catch...

//Kotlin
fun main() {
    var a = 1
    var b = 2
    var c: Int
    try {
        c = a/b
    }catch (e : Exception) {
        e.printStackTrace()
        c = 0
    }
}

写作分支表达式:

//Kotlin
fun main() {
    var a = 1
    var b = 2
    var c: Int
    c = try {
        a/b
    }catch (e : Exception) {
        e.printStackTrace()
        0
    }
}