Kotlin學習筆記二(函數語法)

基礎函數語法

//聲明一個函數
fun method1(name:String){
    println(name)
}

//聲明一個帶默認參數的函數 可以直接 method2() 調用就是使用默認參數
fun method2(name:String = "method2"){
    println(name)
}

//如果一個函數只有一個語句,可以直接這樣聲明
fun method3(name:String ) = println(name)

//函數嵌套,在一個函數中又聲明一個函數,用于創建遞歸的函數
//或者不希望被外部函數訪問到的函數。
fun  method(){
    val str = "hey"
    fun say(count :Int = 5){
        println(str)
        if (count>0){
            say(count -1)
        }
    }
    say()
}

擴展函數 用于擴展無法控制第三方類庫等

//先定義一個空的java類
public class ExtendMethod {

}


//創建一個ExtendMethod.kt文件 定義一個擴展函數 類型.方法名
public fun ExtendMethod.extendMethod(count: Int = 123): Int {
    return count
}

//kotlin中調用這個擴展函數
fun main(args: Array<String>) {
    //先聲明這個java對象
    val extendMethod = ExtendMethod()
    //用這個java對象去調用這個擴展函數
    var extendMethodVar = extendMethod.extendMethod(21)
    println(extendMethodVar)
}

//java中調用這個擴展函數
public static void main(String[] args){
    //創建這個java對象
    ExtendMethod extendMethod = new ExtendMethod();
    //使用ExtendMethodKt來調用這個方法
    int i = ExtendMethodKt.extendMethod(extendMethod,11);
    System.out.println(i);
}

Kotlin中的Lambda函數相關語法

//Java中使用Lambda帶替代匿名內部類的使用例子,這樣可以使代碼更簡潔
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    }
});

Thread thread1 = new Thread(() -> {
});

//下面是kotlin中的使用例子 ,Kotlin中的Lambda是一個匿名對象
//kotlin 中的lambda表達式 
//Unit:如果一個函數沒有返回值,會默認返回一個Unit對象 就像Java中的void
val thread1 = Thread({ -> Unit })

//如果lambda沒有參數,可以省略箭頭 ->
val thread2 = Thread({})

//如果函數只有一個參數,并且這個參數時lambda,可以不要小括號
val thread3 = Thread {}


//Lambda閉包聲明:
// 將{ age: Int -> println(age) }這個lambda閉包聲明為lambdaVal,
// 注意kotlin的lambda的參數上限,最大是22個
val lambdaVal = { age: Int -> println(age) }

fun main(args: Array<String>) {
    //調用lambda閉包
    lambdaVal(27)
}

高階函數

一個函數(或者Lambda)的函數又是一個函數(或者Lambda)這樣的函數稱為高階函數

/**
 * 高階函數 一個參數時布爾類型的 isdebug
 * 第二個參數時 lambda函數
 */
fun highFun(isDebug: Boolean, method:()-> Unit) {
    if (isDebug) method()

}

fun main(args: Array<String>) {
    //傳入一個布爾類型和一個lambda參數
    highFun(true){
        print(123)
    }
}

//Kotlin中  對象::函數 的用法
fun main(args: Array<String>) {
    //使用lambda 聲明一個 Runnable匿名對象,
    val runnable = Runnable { println(" run run run") }
    //聲明一個沒有返回值類型為Unit的函數
    val function :() ->Unit
    //kotlin中使用 對象::函數 去引用一個函數聲明  對象.函數 這樣是直接去執行一個函數
    //在高階函數中,是傳遞的函數的聲明,如果傳遞 對象.函數 實際傳遞一個返回值
    //將function函數聲明引用為  runnable ::run
    function = runnable ::run
    highFun(true,function)
    
    //也可以直接將 runnable run函數引用傳入
    highFun(true,runnable ::run)
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容