中缀表达式

只有一个参数 ,而且用infix修饰

class Book {
    //中缀表达式
    infix fun on(any: Any):Boolean{
        return  false
    }
}

class Desk{

}
//dsl用的比较多。一般不会这么写
    if(Book() on Desk()){

    }
//dsl用的比较多。一般不会这么写
    if(Book() on "what??are you "){

    }

分支表达式(重点)Kot  lin when

package com.yzdzy.kotlin

private const val USERNAME = "Kotlin"
private const val PASSWORD = "jetbranins"
private const val ADMIN_USER = "admin"
private const val ADMIN_PWD = "admin"

private const val DEBUG = 1
private const val USER = 0
fun main(args: Array<String>) {

    var mode = USER
    if (!args.isEmpty() && args[0] == "1") {
        mode = DEBUG
    }
    println("请输入用户名:")
    val username = readLine()
    println("请输入密码:")
    val password = readLine()
    if (mode == DEBUG && username == ADMIN_USER && password == ADMIN_PWD) {
        println("管理员登录成功")

        //分支语句
    } else if (username == USERNAME && password == PASSWORD) {
        println("登录成功")
    } else  {
        println("登录失败")
    }
}
var mode = USER

这句话我们如果想改为VAL 那么怎么操作呢。。就用到了分支表达式

具体语法如下

    val mode = if (!args.isEmpty() && args[0] == "1") {
        DEBUG
    } else {
        USER
    }

分支语句

主要是when

相对于之前的java

package com.yzdzy.kotlin.when;

public class Player {
    enum State {
        IDLE, BUFFERING, PLAYING, PAUSE
    }

    private State state = State.IDLE;

    public void pause() {
        switch (state) {
            case BUFFERING:
            case PLAYING:
                doPause();
                break;
            default:
        }
    }

    private void doPause() {
    }
}

直接copy java代码 到kotlin中、会提示自动转换

转换后的代码

package com.yzdzy.kotlin

class Player {
     enum class State {
        IDLE, BUFFERING, PLAYING, PAUSE
    }

    private val state = State.IDLE
    fun pause() {
        when (state) {
            State.BUFFERING, State.PLAYING -> doPause()
            //相当于defalut
            else -> {
            }
        }
    }

    private fun doPause() {}
} 

可能会报错。。

Cannot access ‘java.io.Serializable’ which is a supertype of

原因是没有设置好jdk  

设置方法如下

把系统有的去掉 然后点击运行会自动配置最新的jdk

再聚焦一下when的用法

 when (state) {
            State.BUFFERING, State.PLAYING -> doPause()
            //相当于defalut
            else -> {
            }
        }

看起来跟switch 也没什么大同小异,,,

别着急。其实还有高级点的用法呢

package com.yzdzy.kotlin.`when`

fun main(args: Array<String>) {
    val x= 5
    when(x){
        is Int -> println("Hello $x")
        in 1..100 -> println("$x in 1..100")
        !in 1..100 -> println(" $x not in 1..100")
        args[0].toInt() -> println("x == args[0]")
    }
}

输出

Hello 5

就是如果有满足条件的就跳出循环。

然后他跟if 一样也能用来定义VAL语句

    val mode = when {
        args.isNotEmpty() && args[0] == "1" -> 1
        else -> 0
    }

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐