免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      Kotlin進(jìn)階系列-函數(shù)類型及函數(shù)字面值

      1. 函數(shù)類型

      在Kotlin中,函數(shù)是一等公民(first class),這意味著函數(shù)可以被存儲在變量或者數(shù)據(jù)結(jié)構(gòu)中,它是有類型的。Kotlin使用函數(shù)類型來描述一個函數(shù)的具體類型。一個完整語法的函數(shù)類型如下:

      (x:Int, y:Int) -> Int

      其特點(diǎn)如下:

      • 函數(shù)類型包括三部分,箭頭左側(cè)的是函數(shù)的參數(shù),描述了參數(shù)個數(shù)和類型,參數(shù)必須用小括號括起來;箭頭處于中間;箭頭右邊是函數(shù)返回值的類型。比如上述函數(shù)類型的入?yún)⑹莾蓚€Int型變量,返回值是Int型。注意如果返回值是Unit型時,不能省略不寫。
      • 函數(shù)參數(shù)的變量名可以省略不寫,例如上述示例可以簡寫為:

      (Int, Int) -> Int

      • 函數(shù)類型可以有一個額外的接收者類型,它的語法如下:

      Int.(Int) -> Int

      接收者類型在參數(shù)前,和參數(shù)所在的小括號用點(diǎn)連接。關(guān)于帶接收者的函數(shù)類型在之后會詳細(xì)講解。

      2. 函數(shù)類型實例化

      既然函數(shù)有類型,那函數(shù)類型變量的值是什么呢?這就涉及到函數(shù)類型的實例化。函數(shù)類型的實例化包括以下幾種常用方式。

      • 使用函數(shù)字面值進(jìn)行賦值。函數(shù)字面值的具體含義下文會詳細(xì)介紹。函數(shù)字面值包括兩種,lambda表達(dá)式和匿名函數(shù),其示例如下:

      a. lambda表達(dá)式:

      { i, j-> this + i + j }

      b. 匿名函數(shù):

      fun(s1: Int, s2: Int): Int { return 1}

      • 使用一個已存在聲明的可調(diào)用引用:

      a. 頂級,本地,成員或者擴(kuò)展函數(shù)。例如:String::toInt。

      b. 頂級,成員,或者擴(kuò)展屬性:List::size。

      c. 構(gòu)造函數(shù):::Regex。

      • 使用實現(xiàn)了函數(shù)類型接口的自定義類的實例。例如:

      class?IntTransformer:?(Int)?->?Int?{? override?operator?fun?invoke(x:?Int):?Int?=?TODO()?}?val?intFunction:?(Int)?->?Int?=?IntTransformer()

      函數(shù)類型的值可以通過invoke操作符調(diào)用,以下是示例。

      val stringPlus: (String, String) -> String = String::plusprintln(stringPlus.invoke(“”))println(stringPlus(“Hello, “, “world!”))

      3. 函數(shù)字面值

      函數(shù)字面值是指不聲明,而直接作為表達(dá)式傳遞的函數(shù)。它包括兩種,lambda表達(dá)式及匿名函數(shù)。

      3.1 lambda表達(dá)式

      lambda表達(dá)式的全語法形式如下:

      val sum: (Int, Int) -> Int = {x: Int, y: Int -> x + y}

      其特點(diǎn)如下:

      • lambda表達(dá)式必須在大括號中。
      • lambda表達(dá)式的參數(shù)列表在->左邊,參數(shù)類型是可選的,如果其類型可以推斷出來,則類型可以省略。例如上例可簡寫為:

      val sum: (Int, Int) -> Int = {x, y -> x + y}

      • 如果lambda表達(dá)式的返回值不是Unit,其最后一個表達(dá)式的值是返回值。例如以下表達(dá)式:

      val sum: (Int, Int) -> Int = {x, y -> x + y x-y}

      其返回值是x-y

      Kotlin有一個約定:如果函數(shù)的最后一個參數(shù)是函數(shù),那么作為相應(yīng)參數(shù)傳入的lambda表達(dá)式可以放在圓括號之外。示例如下:

      以lambda表達(dá)式作為參數(shù)的高階函數(shù)如下:

      fun lambdaWrapper(labmda: (Int) -> Int) { labmda.invoke(1)}

      其調(diào)用示例可以簡寫為:

      fun lambdaTest() { lambdaWrapper() { it -> it+1 }}

      如果lambda表達(dá)式是唯一的參數(shù),那其圓括號可以省略,示例如下:

      fun lambdaTest() { lambdaWrapper{ it -> it+1 }}

      由于本lambda表達(dá)式只有一個參數(shù),其可以隱式聲明為it,并去掉該參數(shù)的聲明和->。示例如下:

      fun lambdaTest() { lambdaWrapper{ it+1 }}

      自Kotlin1.1起,如果lambda表達(dá)式的參數(shù)未使用,那么可以用下劃線取代其名稱:

      map.forEach { _, value -> println(“$value!”) }

      3.2 匿名函數(shù)

      lambda表達(dá)式不能顯示的指定返回值的類型。如果需要顯示指定返回值的類型,則需要使用匿名函數(shù)。匿名函數(shù)和普通函數(shù)非常類似,除了其函數(shù)名被省略。其示例如下:

      fun(x: Int, y: Int): Int { return x + y}

      匿名函數(shù)的參數(shù)和返回值類型的聲明與常規(guī)函數(shù)相同,同時類型如果可以推斷出來則可以省略。例如以下示例:

      fun anonymousWrapper(labmda: (Int) -> Int) {????labmda.invoke(1)}fun anonymousTest() {????anonymousWrapper(fun (i: Int): Int {????????return ?i + 1????})}

      anonymousTest中對匿名函數(shù)的調(diào)用是完整語法形態(tài),由于參數(shù)類型和返回值類型可以推斷,因此,其可以簡寫為

      fun anonymousTest() { anonymousWrapper(fun (i) = i+1)}

      請注意,匿名函數(shù)參數(shù)總是在括號內(nèi)傳遞。 允許將函數(shù)留在圓括號外的簡寫語法僅適用于lambda表達(dá)式。

      lambda表達(dá)式與匿名函數(shù)之間的另一個區(qū)別是非局部返回的行為。一個不帶標(biāo)簽的return語句總是在用fun關(guān)鍵字聲明的函數(shù)中返回。這意味著lambda表達(dá)式中的return將從包含它的函數(shù)返回,而匿名函數(shù)中的return將從匿名函數(shù)自身返回。

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年7月8日 09:23
      下一篇 2022年7月8日 09:24

      相關(guān)推薦

      • 存儲過程語法(sql server存儲過程語法)

        今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

        2022年11月26日
      • 鬧劇落下帷幕,曼聯(lián)官宣 C 羅離隊

        1、鬧劇落下帷幕,曼聯(lián)官宣 C 羅離隊 在經(jīng)歷過半個賽季的激烈鬧劇、C 羅私自接受采訪炮轟曼聯(lián)之后,俱樂部終于做出了相對應(yīng)的措施:正式官宣 C 羅離隊。 在曼聯(lián)俱樂部發(fā)布的聲明中寫…

        2022年11月24日
      • iqoo11什么時候上市 iqoo11發(fā)布時間最新消息

        iqoo11什么時候發(fā)布?隨著新一代旗艦芯片的發(fā)布,各家手機(jī)廠商也是公布了自己的旗艦機(jī),那么iqoo11什么時候發(fā)布呢?下面就讓小編為大家介紹一下,一起來看看吧。 iqoo11什么…

        2022年11月24日
      • 銳龍97900x參數(shù)規(guī)格跑分評測 銳龍97900x屬于什么檔次

        銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號之一,它采用了這一代標(biāo)配的zen4架構(gòu)和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀(jì)發(fā)揮怎么樣呢,下面就來看看銳…

        2022年11月24日
      • 曝小米13系列已量產(chǎn):起步價格或定在4500元左右

        高通目前已經(jīng)發(fā)布第二代驍龍8芯片,首批機(jī)型已經(jīng)蓄勢待發(fā),小米此前也已經(jīng)宣布新旗艦要率先搭載。 據(jù)澎湃報道,小米13系列已經(jīng)正式量產(chǎn),全系均搭載4nm芯片,不出意外是標(biāo)配第二代驍龍8…

        2022年11月24日
      • 王者榮耀高幀率模式支持機(jī)型列表最新 新增機(jī)型名單

        11月24日上午8:30-9:30,《王者榮耀》將進(jìn)行全服不停機(jī)更新。本次更新大小安卓約33MB,iOS約44MB。 為了讓玩家們能享受更平滑,更精美的王者榮耀操作畫面體驗,在設(shè)置…

        2022年11月24日
      • vivox90pro配置參數(shù)跑分詳情 vivox90pro是什么屏幕

        vivox90pro參數(shù)配置詳情怎么樣?vivo手機(jī)在昨晚舉行了X90系列發(fā)布會,有普通款、pro款以及pro+款三個版本,那么vivox90pro具體配置怎么樣呢?下面就讓小編為…

        2022年11月23日
      • iPhone 15全系USBC接口!Pro版升級3nm處理器

        蘋果的iPhone 14系列手機(jī)已經(jīng)上市了,明年輪到iPhone 15了,這一代的改進(jìn)也不少,不過蘋果依然會堅持今年的策略,那就是標(biāo)準(zhǔn)版擠牙膏,iPhone 15 Pro系列才會有…

        2022年11月23日
      • vivox90參數(shù)配置詳情 vivox90處理器功耗跑分介紹

        vivox90參數(shù)配置詳情怎么樣?vivo手機(jī)在昨晚舉行了X90系列發(fā)布會,有普通款、pro款以及pro+款三個版本,那么vivox90具體配置怎么樣呢?下面就讓小編為大家介紹一下…

        2022年11月23日
      • 華為P60系列預(yù)計將于明年3月發(fā)布:共4款機(jī)型

        定位時尚的華為旗艦P系列機(jī)型迎來新的爆料消息,據(jù)外媒爆料,華為P60系列預(yù)計將于明年3月發(fā)布,共包含4款機(jī)型分別是華為P60,華為P60 Pro、華為P60 Pocket(折疊屏)…

        2022年11月23日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息