【9】 kotlin 中缀表达式 分支表达式 when表达式

中缀表达式

只有一个参数 ,而且用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
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值