<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      kotlin更多語言結構——>解構聲明

      解構聲明

       

        有時把一個對象 解構 成很多變量會很方便,例如:

      val (name, age) = person

        這種語法稱為 解構聲明 。一個解構聲明同時創建多個變量。我們已經聲明了兩個新變量:name 和 age ,并且 可以獨立使用它們

      println(name)
      println(age)

        一個解構聲明會被編譯成以下代碼:

      val name = person.component1() 
      val age = person.component2()

        其中的 component1() 和 component2() 函數是在 Kotlin 中廣泛使用的 約定原則 的另一個例子。(參? 像 + 和 * 、for-循環等操作符)。任何表達式都可以出現在解構聲明的右側,只要可以對它調用所需數量的 component 函數即可。當然,可以有 component3() 和 component4() 等等。

        請注意,componentN() 函數需要用 operator 關鍵字標記,以允許在解構聲明中使用它們。

        解構聲明也可以用在 for-循環中:當你寫

      for ((a, b) in collection) { ...... }

        變量 a 和 b 的值取自對集合中的元素上調用 component1() 和 component2() 的返回值。

       

       

      例:從函數中返回兩個變量

        讓我們假設我們需要從一個函數返回兩個東西。例如,一個結果對象和一個某種狀態。在 Kotlin 中一個簡潔的 實現方式是聲明一個數據類 并返回其實例:

      data class Result(val result: Int, val status: Status)

      fun function(......): Result {   
      // 各種計算   return Result(result, status) }
      // 現在,使用該函數: val (result, status) = function(......)

        因為數據類自動聲明 componentN() 函數,所以這里可以用解構聲明

        注意:我們也可以使用標準類 Pair 并且讓 function() 返回 Pair<Int, Status>,但是讓數據合理命 名通常更好

       

      例:解構聲明和映射

        可能遍歷一個映射(map)最好的方式就是這樣

      for ((key, value) in map) {
           // 使用該 key、value 做些事情
      }

        為使其能用,我們應該
        — 通過提供一個 iterator() 函數將映射表示為一個值的序列;

        — 通過提供函數 component1() 和 component2() 來將每個元素呈現為一對。

        當然事實上,標準庫提供了這樣的擴展:

      operator fun <K, V> Map<K, V>.iterator(): Iterator<Map.Entry<K, V>> = entrySet().iterator() 
      operator fun <K, V> Map.Entry<K, V>.component1() = getKey()
      operator fun <K, V> Map.Entry<K, V>.component2() = getValue()

       

      下劃線用于未使用的變量(自 1.1 起)

        如果在解構聲明中你不需要某個變量,那么可以用下劃線取代其名稱

      val (_, status) = getResult()

        對于以這種方式跳過的組件,不會調用相應的 componentN() 操作符函數

       

      在 lambda 表達式中解構(自 1.1 起)

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

      map.mapValues { entry -> "${entry.value}!" } 
      map.mapValues { (key, value) -> "$value!" }

       

        注意聲明兩個參數和聲明一個解構對來取代單個參數之間的區別:

      { a //-> ...... } // 一個參數
      { a, b //-> ...... } // 兩個參數
      { (a, b) //-> ...... } // 一個解構對
      { (a, b), c //-> ...... } // 一個解構對以及其他參數

       

        如果解構的參數中的一個組件未使用,那么可以將其替換為下劃線,以避免編造其名稱:

      map.mapValues { (_, value) -> "$value!" }

       

        你可以指定整個解構的參數的類型或者分別指定特定組件的類型:

      map.mapValues { (_, value): Map.Entry<Int, String> -> "$value!" } 
      map.mapValues { (_, value: String) -> "$value!" }

       

       

      posted @ 2022-01-18 10:42  王世楨  閱讀(113)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 99久re热视频这里只有精品6| 久久亚洲国产五月综合网| 99久久精品国产一区二区蜜芽| 日本系列亚洲系列精品| 无码精品人妻一区二区三区中 | 久久精品娱乐亚洲领先| 一亚洲一区二区中文字幕| 久久美女夜夜骚骚免费视频| 国产在线中文字幕精品| 国产精品美女久久久久久麻豆| 国产激情av一区二区三区| 男女一边摸一边做爽爽| 国产极品视频一区二区三区| 商丘市| 精品熟女少妇免费久久| 中文国产不卡一区二区| 国产精品爽爽久久久久久| 亚洲国产综合av在线观看| 久久天天躁狠狠躁夜夜婷| 彩票| 亚洲中文久久久久久精品国产| 9l精品人妻中文字幕色| 在线观看潮喷失禁大喷水无码| 国产老肥熟一区二区三区| 亚洲AV日韩精品久久久久| 亚洲天堂av在线免费看| 国产农村妇女aaaaa视频| 国产果冻豆传媒麻婆精东| 日本精品一区二区不卡| 诱人的老师hd中文字幕| 亚洲全网成人资源在线观看| 丰满少妇被猛烈进出69影院 | 微拍福利一区二区三区| 国产精品自在拍首页视频8| 国产精品一区二区三区三级| 亚洲精品国产自在久久| 欧美亚洲色综久久精品国产| 亚洲码国产精品高潮在线| 国产一级片内射在线视频| 激情综合网激情国产av| 丰满少妇特黄一区二区三区|