<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## Lambda編程 在前面的章節中,我們講解過如何使用匿名內部類,雖然匿名內部類的代碼相比常規的類要簡潔,但**如果匿名內部類只包含一個方法,那么匿名內部類的語法就顯得有些冗余**。為此,在JDK 1.8中,引入了Lambda表達式。 * **高階函數:當Lambda表達式以函數的實際參數或者返回值存在時,該函數被稱為高階函數**; * **內聯函數:當Lambda表達式被inline修飾時,該函數被稱為內聯函數**。 ### Lambda表達式入門 Lambda表達式由數學中的λ演算得名,它是**一個匿名函數,是對匿名內部類的一種簡化**,本小節中我們將針對Lambda表達式進行詳細講解。 #### Lambda表達式簡介 Lambda表達式就是一個匿名函數,它是函數式編程的基礎,所謂函數式編程實際上就是一種編程范式,即如何編寫程序的方法論。函數式編程的思想是將計算機運算視為函數的計算,并且計算的函數可以接收函數作為輸入參數或者當作返回值來使用。使用函數式編程可以減少代碼的重復,提高程序的開發效率。 Lambda表達式相對于普通函數有些區別,普通函數有4種返回值類型,即無參數無返回值、無參數有返回值、有參數無返回值、有參數有返回值。而**Lambda表達式只有兩種返回值類型,即無參數有返回值、有參數有返回值**。 ##### 無參數有返回值 在定義無參數有返回值的Lambda表達式時,**只需要將函數體寫在“{}”中,函數體可以是表達式或語句塊**,具體語法格式如下: ``` {函數體} ``` 例 ``` {println()} ``` 上面這行代碼就是**聲明一個無參數有返回值的Lambda表達式,相當于聲明了一個函數**。 下面我們就來學習一下如何調用無參數有返回值的Lambda表達式。 無參數有返回值的Lambda表達式調用的語法格式如下: ``` {函數體}() ``` 例 ``` {println()}() ``` 從上述代碼可以看出,**在調用Lambda表達式時,只是在Lambda表達式后添加了“()”,“()”就代表了調用該表達式。當Lambda表達式被調用之后便會執行表達式中的函數體。** 接下來我們通過一個簡單的案例來進行Lambda表達式的調用,具體代碼如下所示。 ``` fun main(args: Array<String>) { { println("Lambda表達式無參數有返回值") //這一行就是函數體 }() } ``` 運行結果: ``` Lambda表達式無參數有返回值 ``` ##### 有參數有返回值 在定義有參數有返回值的Lambda表達式時,需**要指定參數名稱以及參數類型,參數之間使用英文“,”分隔,且參數類型可以省略,函數體會自動校對。Lambda表達式中的“->”用于表示箭頭,用于指定參數或數據的指向**,具體語法格式如下: ``` {參數名:參數類型,參數名:參數類型…->函數體} ``` 有參數有返回值的Lambda表達式與無參數有返回值的Lambda表達式**調用方式基本類似**,同樣**需要在表達式后方添加“()”,只不過“()”中需要填寫函數的參數**,有參數有返回值的Lambda表達式調用的語法格式如下: ``` {參數名:參數類型,參數名:參數類型 … -> 函數體} (實參1,實參2,...) ``` 接下來我們通過一個案例來進行演示,具體代碼如下所示。 ``` fun main(args: Array<String>) { val sum = { a : Int,b : Int -> a + b }(6,8) print(sum) } ``` 運行結果: ``` 14 ``` 在上述代碼中,定義了一個函數,并將該函數賦值給變量sum。在該函數中聲明了兩個Int類型的變量a和b,函數體中執行a和b的是求和操作,“->”后的a+b便是返回的結果。為了調用該函數,在函數體后方使用“(6,8)”傳遞了兩個實參6和8,最后將結果進行打印,輸出運行結果14。 在上面的示例中是在聲明Lambda表達式之后直接就調用此函數,**在開發中還可以將Lambda表達式賦值給一個變量,通過變量來直接調用**。接下來我們來對前面的示例進行修改,修改后的代碼如下所示。 ``` fun main(args: Array<String>) { var sum = { a : Int,b : Int -> a + b } println(sum(6,8)) //函數調用 } ``` 運行結果: ``` 14 ``` ##### Lambda表達式返回值 由于Lambda表達式所表示的函數都是有返回值的,但通過以上案例可知,Lambda表達式已經省略了返回值的類型和方法名,那么是**如何來聲明返回值的類型和返回值**的呢?接下來我們通過一個案例來演示,具體代碼如下所示。 ``` fun main(args: Array<String>) { println("-------------------1----------------------") val result1 = { println("輸出語句1"); "字符串" }() println("返回值:$result1") println("返回值類型:${result1.javaClass}") println("-------------------2----------------------") val result2 = { println("輸出語句1"); println("輸出語句2"); 18 }() println("返回值:$result2") println("返回值類型:${result2.javaClass}") println("------------------3-----------------------") val result3 = { println("輸出語句1"); println("輸出語句2"); true }() println("返回值:$result3") println("返回值類型:${result3.javaClass}") } ``` 運行結果: ``` -------------------1---------------------- 輸出語句1 返回值:字符串 返回值類型:class java.lang.String -------------------2---------------------- 輸出語句1 輸出語句2返回值:18 返回值類型:int ------------------3----------------------- 輸出語句1 輸出語句2 返回值:true 返回值類型:boolean ``` 從運行結果可以看出,**在每次調用Lambda表達式時,不管方法體里面的語句執行多少條,返回值的類型和返回值都是由方法體中最后一條語句決定的,因此在實際返回值后不要編寫任何語句**。 * **如果在實際返回值后編寫語句會發生什么情況呢?** 接下來我們通過一個數字求和的案例來進行演示,具體代碼如下所示。 ``` fun main(args: Array<String>) { var sum = { a :Int,b: Int -> a + b "我是搗亂的" } println(sum(9,7)) } ``` 運行結果: ``` 我是搗亂的 ``` 從運行結果可以看出,程序功能是求a與b兩個數字之和,但是返回值卻是“我是搗亂的”,與預期不符,無法輸出想要的結果,所以此處一定要記住,**不要將不是返回值的語句放置在方法體的最后一條語句的位置**。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看