Kotlin学习笔记(五)接口

6 阅读1分钟

1、类定义

interface Expr {}


class Num(val value: Int) : Expr

class Sum(val left: Expr, val right: Expr) : Expr

2、if语句实现类型判断

fun eval(e: Expr): Int {
    if (e is Num) {
        val n = e as Num
        return n.value
    }
    if (e is Sum) {
        return eval(e.left) + eval(e.right)
    }
    throw IllegalArgumentException("Unkown exception")
}

3、when语句优化

fun eval(e: Expr): Int {
    return when (e) {
        is Num -> e.value
        is Sum -> eval(e.left) + eval(e.right)
        else -> throw IllegalArgumentException("Unkown expression")
    }
}

4、带日志的when语句

fun evalWithLogging(e: Expr): Int =
    when (e) {
        is Num -> {
            println("num:${e.value}")
            e.value
        }
        is Sum -> {
            val left = evalWithLogging(e.left)
            val right = evalWithLogging(e.right)
            println("sum: $left + $right")
            left + right
        }

        else -> throw IllegalArgumentException("Unknown expression")
    }

5、测试

fun main(args: Array<String>) {
    val sum = Sum(Sum(Num(1), Num(2)), Num(4));
    println(sum)
    println(eval(sum))
}