中缀表达式
只有一个参数 ,而且用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
}