美文网首页
kotlin从入门到看开 ₄

kotlin从入门到看开 ₄

作者: 東方月初 | 来源:发表于2018-10-30 11:59 被阅读11次

layout: post
title: "kotlin-程序结构2"
subtitle: "认命就是你和你的自尊心野心不甘心一起围着桌子坐下来 握手言和"


表达式

中缀表达式

  • 调用时可以省去 . () 调用
  • 只有一个参数,且用 infix 修饰的函数
class Paper(word: String) {
    var word = word
}

class Pen {
    infix fun on(paper: Paper) {
        if (paper.word.isNotEmpty()) {
            println("Pen on Paper write ${paper.word}")
        } else {
            println("Pen not on Paper")
        }
    }
}

fun main(args: Array<String>) {
    var pen = Pen()
    val paper = Paper("\"Hello infix\"")
    pen on paper
}

if 表达式

  • 在kotlin中 if 不只是分支语句还是表达式 if 是有返回值的
  • 代码块内语句最后一行为返回值
val s:Int = if (paper.word.isEmpty()){
        0
    }else{
        1
    }

when 表达式

  • 加强版的 switch ,支持任意类型
  • 支持纯表达式条件分支(类似于 if)

例一

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

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

例二

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

    private var state = State.IDLE


    fun pause() {
        when (state) {
            Player.State.BUFFERING, Player.State.PLAYING -> doPause()
            else -> {

            }
        }
    }

    fun resume() {
        when (state) {
            Player.State.PAUSED -> doResume()
        }//什么都不做
    }

    private fun doResume() {
        state = State.PLAYING
        //处理真正的继续播放逻辑
    }

    private fun doPause() {
        state = State.PAUSED
        //处理真正的暂停逻辑
    }
}

循环语句

for 循环

    val listInt = listOf(1, 2, 4, 5)
    for (i in listInt){
        println(i)
    }

跳过和终止循环

  • continue : 跳过当前循环
  • break : 终止循环
  • 多层循环嵌套终止结合标签使用
   val listInt = listOf(1, 2, 4, 5,7,9,23)
    Outer@for (i in listInt){
        println(i)
        Inner@while (i>5){
            break@Outer
        }
    }

异常捕获

  • try catch 用法和Java一致
  • finally 无论代码是否抛异常都会执行
 try {
        val arg1 = args[0].toInt() //1
        val arg2 = args[1].toInt() //2a
        println("$arg1 + $arg2 = ${sum(arg1, arg2)}")
    }catch (e: NumberFormatException){
        println("您确定输入的是整数吗?")
    }catch (e: ArrayIndexOutOfBoundsException){
        println("您确定输入的是两个整数吗?")
    }catch (e: Exception){
        println("程序出现了未知异常,可能是您的人品太差了.${e.message}")
    }finally {
        println("谢谢您使用我们的加法计算器")
    }

具名参数

具名参数 : 给函数的实参附上形参

fun sum(args1:Int,args2:Int)=args1+args2
sum(args1=2,args2=3)//此时args2=3在前在后编译器都知道3是给args2的

变长参数

  • 变长参数可以接收多个值
  • 可以在参数列表的任意位置
  • 若传参有歧义时 需用具名参数
fun main(vararg args: String) {

    val list = arrayListOf(1,3,4,5)
    val array = intArrayOf(1,3,4,5)
    //*array 目前只支持数组 只用于变长参数列表展开数组
    hello(3.0, *array)
}

fun hello(double: Double, vararg ints: Int, string: String = "Hello"){
    println(double)
    ints.forEach(::println)
    println(string)
}

默认参数

  • 为函数参数指定默认值
  • 可以为任意位置的参数指定默认值
  • 若传参有歧义时 需用具名参数

相关文章

网友评论

      本文标题:kotlin从入门到看开 ₄

      本文链接:https://www.haomeiwen.com/subject/ymfgtqtx.html