Kotlin 函數(shù)、匿名函數(shù)/lambda表達式

Kotlin 函數(shù):

示例:
fun function(params: String): Int {
        
}
  • params: String 函數(shù)參數(shù)
  • fun function(params: String) 無返回值函數(shù)
  • fun function(params: String): Int 有返回值函數(shù),返回值類型為Int
  • Kotlin的函數(shù)可以聲明為toplevel也就是跟class一個級別,也就是說不必非放在類里面
  • 如果一個函數(shù)只有一行代碼時,kotlin允許我們直接這樣寫,直接省略函數(shù)體
    如:
fun getAddressB(id: Int, name: String) = {
        "北京"
    }

    fun getAddressC(id: Int, name: String) = "上海"  //類型自動推導

多參數(shù)函數(shù)寫法:

    fun setDatas(vararg value: Int) {
        for (i in value) {
            println(i)
        }
    }

Test().setDatas(0, 1, 2)
函數(shù)的默認參數(shù)值

聲明函數(shù)變量時,直接給參數(shù)設置默認值,如果調(diào)用函數(shù)時對應參數(shù)缺省,那么該參數(shù)就是默認值。而在java中實現(xiàn)默認參數(shù)值方法則是需要自己寫多個重構(gòu)方法。

    fun createUser(name: String = "小明", age: Int = 20, id: Int = 1) {

    }

        createUser()
        createUser("小王")
        createUser("小紅",18)
        createUser("小李", 25, 2)

操作示例:

fun initParams() {
    //有參數(shù)默認值可不傳,可選擇性傳
    action01("haha", 20)
    action02("lily")
    action03(age = 15)
    action03(name = "luky", age = 15)  //定義名字填寫的參數(shù),叫做具名函數(shù)參數(shù)
}

private fun action01(name: String, age: Int) {
    println("$name---$age")
}

private fun action02(name: String, age: Int = 18) { //參數(shù)的默認值
    println("$name---$age")
}

private fun action03(name: String = "hello", age: Int = 18) {
    println("$name---$age")
}

//返回值類型為Unit,表示為void返回類型,在函數(shù)無返回時,一般不寫Unit。
/**
 * Unit類型,不寫默認也有, 無參數(shù)返回的忽略類型
 * 相當于java的void關(guān)鍵字,反編成java語言就是void
 * 但是void是關(guān)鍵字,Unit是類型
 */
private fun doWork() : Unit {
    println() //return可寫可不寫
//        return println()
}
Kotlin 匿名函數(shù):
/**
 * 匿名函數(shù) == lambda表達式
 */

fun noName() {
    val len = "lili".count()
    println(len)

    "lili".count {
        // it等價于 l  i  l  i元素,中間調(diào)用了一個predicate函數(shù)
        it == 'r'
    }
}

/**
 * 函數(shù)參數(shù)
 */
fun funParams() {
    //將函數(shù)類型和形參分開寫
    val methodAction : (Int, Int, Int) -> String = { num1, num2, num3 ->
        var sum = num1 + num2 + num3
        "" +sum
    }

    //調(diào)用函數(shù)
    System.out.println(methodAction(1, 2, 3))
}

/**
 * 匿名函數(shù)的類型推斷
 * 入?yún)ⅰ⒎祷仡愋筒还潭? * 使用最后一行表達式推斷類型
 */
fun funType() {

    //匿名函數(shù)類型推斷為String
    //方法名 + 冒號: 方式必須指定參數(shù)類型和返回類型
    val method1: () -> String = {
        ""
    }

    method1()

    //方法名 = {}  方式自動推斷返回類型,返回類型跟回返回可隨時更改
    val method2 = { v1:Double, v2:Float, v3:Int ->
        ""  //可返回 String
        3423  //可返回 Int
        true //可返回boolean類型
        { a:Int ->  //可返回函數(shù)

        }
    }

    method2(23.3, 32.2f, 10)

    val method3 = {

    }
    method3() //無入?yún)?,無返回值類型

    val method4 = { number: Int ->
        number
    }
    var intNum = method4(8)
}
Github代碼地址:

https://github.com/running-libo/KotlinPractise

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容