Kotlin學習筆記(十)解構聲明__kotlin

來源:互聯網
上載者:User

Kotlin中,我們可以將一個對象解構成多個變數:

//資料類data class Person(val name:String="Kotlin",val sex:String="男",val age:Int=1)fun foo(){    var (name,sex,age)=Person()//解構聲明    print("name=$name&sex=$sex&age=$age")}

這就是解構聲明。解構聲明可以一次聲明多個變數,任何錶達式都可以出現在解構聲明的右側,只要我們可以對它調用所需數量的component函數(注意:componentN()函數需要用operator關鍵字修飾,以允許其在解構聲明聲明中使用它們)。資料類自動聲明component函數。

以上代碼相當於:

//資料類data class Person(val name:String="Kotlin",val sex:String="男",val age:Int=1)fun foo(){    //var (name,sex,age)=Person()    var person=Person()    var name=person.component1()//按照聲明順序返回person的第一個屬性值,即name屬性值    var sex=person.component2()//按照聲明順序返回person的第二個屬性值,即sex屬性值    var age=person.component3()//按照聲明順序返回person的第三個屬性值,即age屬性值    print("name=$name&sex=$sex&age=$age")}

通過解構賦值我們可以在一個函數中返回多個值,例如我們要返回一個name值,一個sex值和一個age值。我們可以這樣實現:首先我們根據要返回的值建立一個資料類,然後在函數中返回這個資料類,這樣間接我們就返回了多個數值:

//資料類data class Person(val name:String="Kotlin",val sex:String="男",val age:Int=1)fun foo3():Person{    //do something    return Person()//返回一個資料類對象}fun printFoo3(){    var(name,sex,age)= foo3()//解構聲明賦值}

我們也可以在for迴圈中使用解構聲明,只要集合中的每個元素提供有componentN()方法

var collections= arrayListOf<Person>()//list集合中元素要為其每個成員屬性提供有componentN方法    for((name,sex,age) in collections){        println("name=$name&sex=$sex&age=$age")    }

我們也可以對映射使用解構賦值。因為map結構提供函數 component1() 和 component2() 來將每個元素呈現為一對。

var map= mutableMapOf<String,String>()    map.put("name","Kotlin")    map.put("sex","男")    map.put("age","13")    for ((key,value) in map){        println("$key=$value")    }

在解構聲明中你如果不需要某個變數,那麼可以用底線取代其名稱:

var (_,sex,age)=Person()//不需要使用的變數用底線代替

可以在lambda運算式中使用解構聲明。如果 lambda 運算式具有 Pair 類型(或者 Map.Entry 或任何其他具有相應 componentN 函數的類型)的參數,可以通過將它們放在括弧中來引入多個新參數來取代單個新參數:

fun foo(person:Person,body:(person:Person)->Unit){    body(person)}fun printFoo(person:Person){    foo(person){        person->//一個Person對象        print("name="+person.name+"sex="+person.sex+"age="+person.age)    }//等價於    foo(person){        (name,sex,age)->//一個解構對        print("name="+name+"sex="+sex+"age="+age)    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.