天天看點

Kotlin-4-Lambda閉包

目錄

1、定義

2、作用

3、文法

4、Lambda 表達式執行個體

5、Kotlin的Lambda實作方式

1、定義

  • Lambda 表達式,也可稱為閉包。(其本質就是匿名函數)

2、作用

  • 使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
  • Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。
  • Lambda 表達式免去了使用匿名方法的麻煩,并且給予Java簡單但是強大的函數化的程式設計能力。

3、文法

lambda 表達式的文法格式如下:

//參數  -> 函數
(parameters) -> expression
           

以下是lambda表達式的重要特征:

  • 可選類型聲明:不需要聲明參數類型,編譯器可以統一識别參數值。
  • 可選的參數圓括号:一個參數無需定義圓括号,但多個參數需要定義圓括号。
  • 可選的大括号:如果主體包含了一個語句,就不需要使用大括号。
  • 可選的傳回關鍵字:如果主體隻有一個表達式傳回值則編譯器會自動傳回值,大括号需要指定明表達式傳回了一個數值。

4、Lambda 表達式執行個體

Lambda 表達式的簡單例子:

// 1. 不需要參數,傳回值為 5  
() -> 5  
  
// 2. 接收一個參數(數字類型),傳回其2倍的值  
x -> 2 * x  
  
// 3. 接受2個參數(數字),并傳回他們的內插補點  
(x, y) -> x – y  
  
// 4. 接收2個int型整數,傳回他們的和  
(int x, int y) -> x + y  
  
// 5. 接受一個 string 對象,并在控制台列印,不傳回任何值(看起來像是傳回void)  
(String s) -> System.out.print(s)
在 Java8Tester.java 檔案輸入以下代碼:           

5、Kotlin的Lambda實作方式

/**
     *  在Java中new Thread()的實作方式
     * @param args
     */
    public static void main(String[] args) {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

            }
        });
        thread.start();

    }
----------------------------------------------------------------------
/**
 *在Kotlin中,我們可以通過Lambda閉包的形式對這段代碼進行縮寫
 * 注意:
 * 1、如果Lambda沒有參數的話,可以省略箭頭
 * 2、如果使用Lambda參數的這個函數,隻有一個參數,且這個參數可以用Lambda表示,那麼就可以省略小括号
 * 3、如果使用Lambda參數的這個函數,有過個參數,但是Lambda參數是最後一個參數,那麼函數可以用()+{}的形式表示
 */
fun main() {

    // 1、正常形式
    val thread = Thread(Runnable { println("hello") })

    // 2、箭頭 + 函數
    val thread1 = Thread({ -> println("hello1") })

    // 3、因為new Runnable()沒有參數,是以我們可以省略那個箭頭
    val thread2 = Thread({ println("hello2") })

    // 4、因為public Thread(Runnable target)隻有target這一個參數,且這個參數是可以用Lambda表示,那麼我們可以省略小括号
    val thread3 = Thread { println("hello3") }

    // 5、因為public Thread(Runnable target),因為參數targer是最後一個參數,我們也可以用()+{}的形式來表示
    val thread4 = Thread() { println("hello4") }

    thread.start()
    thread1.start()
    thread2.start()
    thread3.start()

}           

繼續閱讀