1、中缀表达式
只有一个参数,且用infix修饰的函数
例如:
//书
class Book{
//infix 自定义运算符的中缀表达式。本没有on,自定义一个,不需要类名.方法即可调用
//传入任意类型,返回一个Boolean类型的参数
infix fun on(any: Any): Boolean{
return true
}
}
//桌子
class Desk
fun main(args: Array<String>) {
if(Book() on Desk()){
println("书在桌上")
}
}
二、分支表达式(如果条件较多,例如If、)
写一个最简单的登录
package net.println.kotlin.chapters
import sun.security.util.Debug
import sun.security.util.Password
/**
* @author:wangdong
* @description:分支表达式实例if
*/
private const val USERNAME = "wangdong"
private const val PASSWORD = "123456"
private const val ADMIN_USER = "root"
private const val ADMIN_PASSWORD = "123456"
private const val DEBUG = "1"
private const val USER = "0"
fun main(args: Array<String>) {
var mode = if (args.isNotEmpty() && args[0] == "1"){
DEBUG
}else{
USER
}
println("输入我的用户名")
//readlin从控制台接收数据
val userName = readLine()
println("请输入我的密码")
val passWord = readLine()
if (mode == DEBUG && userName == ADMIN_USER && passWord == ADMIN_PASSWORD){
println("欢迎管理员登陆")
}else if (userName == USERNAME && passWord == PASSWORD){
println("欢迎登陆")
}else{
println("用户名或者密码错误")
}
}
三、简单写一个播放音乐的(when)
package net.println.kotlin.chapters
/**
* @author:wangdong
* @description:`WhenExample.kt`
*/
class WhenExample {
enum class State {
IDLE, BUFFERING, PLAYING, PAUSED
}
private var state = State.IDLE
fun pause() {
when (state) {
WhenExample.State.BUFFERING, WhenExample.State.PLAYING -> doPause()
else -> {
}
}
}
fun resume() {
when (state) {
WhenExample.State.PAUSED -> doResume(state)
}//什么都不做
}
fun doResume(state: State) {
if (state == State.PLAYING)
//处理真正的继续播放逻辑
println("播放音乐")
}
private fun doPause() {
state = State.PAUSED
//处理真正的暂停逻辑
}
}
fun main(args: Array<String>) {
val example: WhenExample = WhenExample()
example.doResume(WhenExample.State.PLAYING)
}
四、When表达式
加强版的switch,支持任意类型
支持纯表达式条件分支(类似于if)
表达是必须得完整
package net.println.kotlin.chapters
/**
* @author:wangdong
* @description:`WhenExample.kt`
*/
fun main(args: Array<String>) {
val x = 5
when(x){
//是否是int
is Int -> println("hello $x")
//是在区间范围内
in 1..100 -> println("$x 在1-100区间内")
//不在区间内
!in 1..100 -> println("$x 不在1-100区间内")
//判断x和下面的表达式值是不是一样
args[0].toInt() -> println("参数和 $x 一样")
}
val mode = when{
args.isNotEmpty() && args[0] == "1" ->1
else -> 0
}
println(mode)
}