最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin 中 infix 關(guān)鍵字的原理和使用場(chǎng)景解析

 更新時(shí)間:2025年05月19日 10:58:10   作者:橙子19911016  
在 Kotlin 中,使用 infix 關(guān)鍵字修飾的函數(shù)稱為中綴函數(shù),使用是可以省略 . 和 (),允許以更自然(類似自然語(yǔ)言)的語(yǔ)法調(diào)用函數(shù),這種特性可以使代碼更具可讀性,下面給大家介紹Kotlin 中 infix 關(guān)鍵字的原理和使用場(chǎng)景,感興趣的朋友一起看看吧

在 Kotlin 中,使用 infix 關(guān)鍵字修飾的函數(shù)稱為中綴函數(shù),使用是可以省略 .(),允許以更自然(類似自然語(yǔ)言)的語(yǔ)法調(diào)用函數(shù),這種特性可以使代碼更具可讀性。

1 infix 的原理

中綴函數(shù)必須滿足以下條件:

  • 必須是成員函數(shù)(成員方法)或擴(kuò)展函數(shù);
  • 有且僅有一個(gè)參數(shù),且不能有默認(rèn)值;
  • 必須顯式聲明 infix 關(guān)鍵字;

調(diào)用方法:

  • 普通函數(shù):a.function(b);
  • 中綴函數(shù):a function b (省略點(diǎn)號(hào)和括號(hào),增強(qiáng)可讀性);

示例:

class Person(private val name: String) {
    // 成員中綴函數(shù)
    infix fun say(message: String) {
        println("$name says $message")
    }
}
// 擴(kuò)展中綴函數(shù)
infix fun Int.multiply(factor: Int): Int = this * factor

反編譯成 Java 代碼:

public final class Person {
   private final String name;
   public final void say(@NotNull String message) {
      Intrinsics.checkNotNullParameter(message, "message");
      String var2 = this.name + " say " + message;
      System.out.println(var2);
   }
   public Person(@NotNull String name) {
      Intrinsics.checkNotNullParameter(name, "name");
      super();
      this.name = name;
   }
}

底層實(shí)現(xiàn):

  • 中綴函數(shù)本質(zhì)上是普通函數(shù),但通過(guò) infix 關(guān)鍵字允許省略 . 和括號(hào) ();
  • 編譯器在語(yǔ)法層面給了支持;(Kotlin 的很多特性都是在語(yǔ)法和編譯器上的優(yōu)化)

2 使用場(chǎng)景

2.1 自然語(yǔ)言風(fēng)格的 API

適用于需要代碼接近自然語(yǔ)言的場(chǎng)景,例如 DSL(領(lǐng)域特定語(yǔ)言)設(shè)計(jì):

infix fun <T> T.shouldEqual(expected: T) {
    if (this != expected) throw AssertionError("Excepted $expected, but got $this")
}
// 使用
actualValue shouldEqual expectedValue

2.2 數(shù)學(xué)或邏輯表達(dá)式

簡(jiǎn)化數(shù)學(xué)運(yùn)算符或邏輯操作的表達(dá):

infix fun Int.pow(exponent: Int): Int = toDouble().pow(exponent).toInt()
val result = 2 pow 3 // 等價(jià)于 2.pow(3)

2.3 鍵值對(duì)構(gòu)造(如 to 函數(shù))

Kotlin 標(biāo)準(zhǔn)庫(kù)中的 to 函數(shù)是典型的中綴函數(shù):

val map = mapOf(
    "name" to "Eileen",
    "age" to 30
)

2.4 鏈?zhǔn)讲僮?/h3>

結(jié)合中綴函數(shù)和擴(kuò)展函數(shù)實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用:

infix fun String.concatWith(another: String) = "$this$another"
// 鏈?zhǔn)街芯Y調(diào)用
val message = "Hello" concatWith "World" concatWith "!"

3 與普通函數(shù)相比

中綴函數(shù)和普通函數(shù)

4 注意事項(xiàng)

  • 參數(shù)限制:中綴函數(shù)只能有一個(gè)參數(shù),且不能有默認(rèn)值;
  • 可見(jiàn)性:中綴函數(shù)必須是 publicinternal(默認(rèn),模塊內(nèi)可見(jiàn));
  • 優(yōu)先級(jí):中綴函數(shù)的優(yōu)先級(jí)是低于算數(shù)運(yùn)算符,但高于布爾運(yùn)算符;
1 + 2 and 3 // 等價(jià)于 (1 + 2) and 3

5 標(biāo)準(zhǔn)庫(kù)中的經(jīng)典案例

Kotlin 標(biāo)準(zhǔn)庫(kù)廣泛使用中綴函數(shù)。

5.1 to 函數(shù)

用于創(chuàng)建 Pair 對(duì)象:

infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

5.2 until 函數(shù)

生成區(qū)間:

val range = 1 until 10 // 等價(jià)于 1.until(10)

5.3 集合操作

例如 stepdownTo

for (i in 10 downTo 1 step 2) {
}

到此這篇關(guān)于Kotlin 中 infix 關(guān)鍵字的原理和使用場(chǎng)景的文章就介紹到這了,更多相關(guān)Kotlin infix 關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤

    Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤

    這篇文章主要介紹了Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-04-04
  • Android DataBinding的官方雙向綁定示例

    Android DataBinding的官方雙向綁定示例

    本篇文章主要介紹了Android DataBinding的官方雙向綁定示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Android Activity之間的數(shù)據(jù)傳遞方法總結(jié)

    Android Activity之間的數(shù)據(jù)傳遞方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Android Activity之間的數(shù)據(jù)傳遞方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小

    Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小

    這篇文章主要介紹了Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android中基于XMPP協(xié)議實(shí)現(xiàn)IM聊天程序與多人聊天室

    Android中基于XMPP協(xié)議實(shí)現(xiàn)IM聊天程序與多人聊天室

    這篇文章主要介紹了Android中基于XMPP協(xié)議實(shí)現(xiàn)IM聊天程序與多人聊天室的方法,XMPP基于XML數(shù)據(jù)格式傳輸,一般用于即時(shí)消息(IM)以及在線現(xiàn)場(chǎng)探測(cè),需要的朋友可以參考下
    2016-02-02
  • 關(guān)于Android Device Monitor 無(wú)法打開(kāi)問(wèn)題

    關(guān)于Android Device Monitor 無(wú)法打開(kāi)問(wèn)題

    大家好,本篇文章主要講的是關(guān)于Android Device Monitor 無(wú)法打開(kāi)問(wèn)題,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 深入分析Android加載so文件源碼

    深入分析Android加載so文件源碼

    這篇文章主要介紹了深入分析Android加載so文件源碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Android中使用DownloadManager類來(lái)管理數(shù)據(jù)下載的教程

    Android中使用DownloadManager類來(lái)管理數(shù)據(jù)下載的教程

    這篇文章主要介紹了Android中使用DownloadManager類來(lái)管理數(shù)據(jù)下載的教程,針對(duì)HTTP下文件的下載與保存地址指定等基礎(chǔ)操作作出了詳細(xì)講解,需要的朋友可以參考下
    2016-04-04
  • Android Koin2基本使用的那件事兒

    Android Koin2基本使用的那件事兒

    這篇文章主要給大家介紹了關(guān)于Android Koin2基本使用的那件事兒,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Android編程實(shí)現(xiàn)圓角邊框的方法

    Android編程實(shí)現(xiàn)圓角邊框的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)圓角邊框的方法,涉及Android針對(duì)樣式布局的相關(guān)設(shè)置技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

潼南县| 巍山| 新巴尔虎右旗| 华蓥市| 曲水县| 渭源县| 平塘县| 江阴市| 兴义市| 水城县| 那坡县| 琼结县| 米易县| 鲁甸县| 平果县| 闽侯县| 河南省| 什邡市| 盱眙县| 贵溪市| 信丰县| 榆树市| 手机| 分宜县| 涿州市| 扶风县| 新密市| 忻州市| 密山市| 永福县| 鹿泉市| 林周县| 辽宁省| 奉节县| 扎鲁特旗| 和政县| 聂拉木县| 济宁市| 安塞县| 高邑县| 梨树县|