Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明

首發(fā)于公眾號(hào): DSGtalk1989

21.解構(gòu)聲明

我們可以直接通過括號(hào)包含變量的方式進(jìn)行數(shù)據(jù)獲取

  • 一般使用

    比如有個(gè)類Person有兩個(gè)屬性name``age。

    我們一般的獲取方式是這樣的

    class Person{
          var name = "1"
          var age = 4
      }
      
      
      fun main() {
          val person = Person()
          val name = person.name
          val age = person.age
      }
    

    我們白白產(chǎn)生了一個(gè)person對象,造成了浪費(fèi)。這時(shí)候我們就可以使用解構(gòu)聲明

    需要去重載操作符方法componentN,所有componentN方法指向的就是括號(hào)中從第一個(gè)開始的參數(shù)

    class Person{
          var name = "1"
          var age = 4
          operator fun component1() = name
          operator fun component2() = age
      }
      
      
      fun main() {
          val (a,b) = Person()
          println(a)
          println(b)
      }
    
  • map使用

    map中使用的比較多的解構(gòu)是這樣的

    for ((key, value) in map) {
         // 使用 key 和 value 執(zhí)行某種操作
      }
    
  • 有些參數(shù)用不到

    比如上面的例子,我們只需要用到name,而不用age,在kotlin1.1之后支持用下劃線略過不需要使用的參數(shù),類似于lambda中不需要使用到的出參。

    val (_,b) = Person()
    
  • lambda中的解構(gòu)

    從kotlin1.1開始支持lambda中有解構(gòu)

     { a -> ... } // 這里是一個(gè)參數(shù)
      { a, b -> ... } // 這里是兩個(gè)參數(shù)
      { (a, b) -> ... } // 這里是將一個(gè)參數(shù)解構(gòu)為兩個(gè)參數(shù)
      { (a, b), c -> ... } // 這里是將一個(gè)參數(shù)解構(gòu)為兩個(gè)參數(shù), 然后是另一個(gè)參數(shù)
    

    我們針對上面的PersonMap分別舉例子

    val personArray = arrayOf(Person())
      
      personArray.filter { 
          (name, age) -> name.startsWith("1") || age > 1
      }
    
      val map = mapOf("key" to 1, "haha" to 2)
      map.mapKeys {
          (key, value) -> println("key  : $key  value : $value")
      }
    

Kotlin學(xué)習(xí)筆記之 1 基礎(chǔ)語法

Kotlin學(xué)習(xí)筆記之 2 基本數(shù)據(jù)類型

Kotlin學(xué)習(xí)筆記之 3 條件控制

Kotlin學(xué)習(xí)筆記之 4 循環(huán)控制

Kotlin學(xué)習(xí)筆記之 5 類和對象

Kotlin學(xué)習(xí)筆記之 6 繼承

Kotlin學(xué)習(xí)筆記之 7 接口

Kotlin學(xué)習(xí)筆記之 8 擴(kuò)展

Kotlin學(xué)習(xí)筆記之 9 數(shù)據(jù)類與密封類

Kotlin學(xué)習(xí)筆記之 10 泛型

Kotlin學(xué)習(xí)筆記之 11 枚舉類

Kotlin學(xué)習(xí)筆記之 12 對象表達(dá)式和對象聲明

Kotlin學(xué)習(xí)筆記之 13 基礎(chǔ)操作符run、with、let、also、apply

Kotlin學(xué)習(xí)筆記之 14 包與導(dǎo)入

Kotlin學(xué)習(xí)筆記之 15 伴生對象

Kotlin學(xué)習(xí)筆記之 16 委托

Kotlin學(xué)習(xí)筆記之 17 可觀察屬性

Kotlin學(xué)習(xí)筆記之 18 函數(shù)

Kotlin學(xué)習(xí)筆記之 19 高階函數(shù)與 lambda 表達(dá)式

Kotlin學(xué)習(xí)筆記之 20 內(nèi)聯(lián)函數(shù)

Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明

Kotlin學(xué)習(xí)筆記之 22 集合

Kotlin學(xué)習(xí)筆記之 23 相等判斷

Kotlin學(xué)習(xí)筆記之 24 操作符重載

Kotlin學(xué)習(xí)筆記之 25 異常捕捉

Kotlin學(xué)習(xí)筆記之 26 反射

Kotlin學(xué)習(xí)筆記之 27 類型別名

Kotlin學(xué)習(xí)筆記之 28 協(xié)程基礎(chǔ)

Kotlin學(xué)習(xí)筆記之 29 上下文與調(diào)度器

Kotlin學(xué)習(xí)筆記之 30 協(xié)程取消與超時(shí)

Kotlin學(xué)習(xí)筆記之 31 協(xié)程掛起函數(shù)的組合

Kotlin學(xué)習(xí)筆記之 32 協(xié)程異常處理

Kotlin學(xué)習(xí)筆記之 33 協(xié)程 & Retrofit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容