美文网首页Kotlin-Android-KotlinJS-Kotlin/Native
Kotlin学习之各种表达式(中缀、分支、when表达式等)的使

Kotlin学习之各种表达式(中缀、分支、when表达式等)的使

作者: 波涛澎湃 | 来源:发表于2018-02-27 16:15 被阅读9次

    中缀表达式

    • 只有一个参数,用infix修饰的函数
    • 举例:
    class Book(val name:String){
         infix fun on(place:String){
             print("《$name》放到${place}上了!")
         }
    
         override fun toString(): String {
           return "我拥有《$name》这本书"
      }
    }
    
    fun main(args: Array<String>) {
        val myBook = Book("简爱")
        println(myBook)
        myBook on "桌子"
    }
    

    IF表达式

    在kotlin中if语句不仅可以像java中那样来使用,还可以有返回值,所以我们可以直接接收一个if表达式的值,如:

    private const val SUPER_USER = 1
    private const val COMM_USER = 2
    fun main(args: Array<String>) {
    
        val userRoleId = if(args.isNotEmpty() && args[0]=="admin"){
            SUPER_USER
        }else{
            COMM_USER
        }
        println(userRoleId)
    }
    

    像上面这样,其中的变量userRoleId就可以直接声明成常量(val),如果在java中则不能这么做,需要声明一个 变量 userRoleId,然后再去走判断的逻辑,根据不同if分支逻辑赋值为相应的值。

    • 注意 IF表达式在使用时必须遵循逻辑的完整性,如:
      val value = 3
      val x = if(value<0) 0 else value //正确
      val y = if(value<0) 0 //错误,赋值时,分支必须完备

    When表达式

    when表达式可以看成是java中switch的加强版,更加简单暴力且支持任意类型,比如下面的java代码:

    public static void main(String args[]) {
            int code = Integer.parseInt(args[0]);
            String rankName;
    
            switch (code) {
                case 0:
                case 1:
                    rankName = "冠军";
                    break;
                case 2:
                    rankName = "亚军";
                    break;
                case 3:
                    rankName = "季军";
                    break;
                default:
                    rankName = "无";
            }
            System.out.println(rankName);
        }
    

    这么长的一段java代码,在kotlin中则可以大大简写成下面的样子:

    fun main(args: Array<String>) {
        val code = Integer.parseInt(args[0])
        val rankName: String
    
        when (code) {
            0,1 -> rankName = "冠军"
            2 -> rankName = "亚军"
            3 -> rankName = "季军"
            else -> rankName = "无"
        }
        println(rankName)
    }
    

    可以看到if语句是可以直接写成when语句的,switch中每句的break也省了(大多数我们每条case都有break的),default则直接用else代替了。再举个when的使用例子:

    fun main(args: Array<String>) {
        val book:Book = ChineseBook("水浒传")
    
        when(book){
            is ChineseBook -> println("是一本中文书,${book.getCnBookName()}")
            is EnglishBook -> println("是一本英文书,${book.getEnBookName()}")
            else -> print("未知语言书籍")
        }
    
        val bookNameSize = when{
            book.toString().isNotEmpty() -> book.toString().length
            else -> 0
        }
        print("书名长度$bookNameSize")
    }
    
    open class Book
    
    class ChineseBook(val name:String):Book(){
        fun getCnBookName():String{
            return "中文书名《$name》"
        }
    
        override fun toString(): String {
            return name
        }
    
    }
    
    class EnglishBook(val name:String):Book(){
        fun getEnBookName():String{
            return "英文书名《$name》"
        }
    
        override fun toString(): String {
            return name
        }
    }
    
    kt.jpg

    从上面可以看出when同if一样,也可以带返回值。

    相关文章

      网友评论

        本文标题:Kotlin学习之各种表达式(中缀、分支、when表达式等)的使

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