基礎函數語法
//聲明一個函數
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)
}