(四)Kotlin简单易学 基础语法-初识函数(中)

(四)Kotlin简单易学 基础语法-初识函数(中),第1张

(四)Kotlin简单易学 基础语法-初识函数(中)

匿名函数

➢ 定义时不取名字的函数,称之为匿名函数,匿名函数通常整体传递给其他函数,或者从其他函数返回。
➢ 匿名函数对Kotlin来说很重要,有了它,我们能够根据需要制定特殊规则,轻松定制标准库里的内置函数。

匿名函数与隐式返回

➢ 匿名函数也有类型,匿名函数可以当作变量赋值给函数类型变量,就像其他变量一样,匿名函数就可以在代码里传送了。变量有类型,变量可以等于函数,函数也会有类型。
函数的类型,由传入的参数和返回值类型决定。
➢和具名函数(具名函数)会隐式或自动返回函数体最后一行语句的结果。

fun main() {
    //第一种写法
    //变量的类型是一个匿名函数
    val blessingFunction:()->String
    blessingFunction={
        val holiday = "New Year"
        "Happy $holiday"
    }
    
    
    //简写
    val blessingFunction2:()->String ={
        val holiday = "New Year"
        "Happy $holiday"
    }
}

函数参数

和具名函数(具名函数)一样,匿名函数可以不带参数,也可以带一个或多个任何类型的参数,需要带参数时,参数的类型放在匿名函数的类型定义中,参数名则放在函数定义中。

fun main() {

    val blessingFunction: (String) -> String = { name ->
        val holiday = "Near year"
        "$name , Happy$holiday"
    }

}

it 关键词

➢定义只有一个参数的匿名函数时,可以使用it关键词来表示参数名。当你需要传入两个值参,it关键词就不能使用了。

fun main() {

    val blessingFunction: (String) -> String = { name ->
        val holiday = "Near year"
        "$name , Happy$holiday"
    }

    val blessingFunction2: (String) -> String = {
        val holiday = "Near year"
        " Happy$holiday"
    }
}

类型推断

➢定义一个变量时,如果已把匿名函数作为变量赋值给它,就不需要显示指明变量类型了。如下图,系统自动推断为 String类型

fun main() {

    val blessingFunction: (String) -> String = {
        val holiday = "Near year"
        " Happy$holiday"
    }

		//不需要显示指明变量类型,省略: (String) -> String
    val blessingFunction2 = {
        val holiday = "Near year"
        " Happy$holiday"
    }
}

类型推断也支持带参数的匿名函数,但为了帮助编译器更准确地推断变量类型,匿名函数的参数名和参数类型必须有。如下图第二个函数中的(name:String,year:Int)必须有。

fun main() {

    val blessingFunction:(String,Int)->String={
        name,year->
        "$name, Happy $year"
    }
    //类型推断写法 参数名和参数类型必须有 name:String,year:Int
    val blessingFunction2={name:String,year:Int->
        "$name, Happy $year"
    }
}

什么是Lambda?

我们将匿名函数称为Lambda,将它的定义成为lambda表达式,它返回的数据称为lambda结果。为什么叫lambda?lambda也可以使用希腊字符 λ 表示是lambda演算的简称,lambda演算是一套数理演算逻辑,由数学家Alonzo Church(阿隆佐.丘齐)于20世纪30年代发明,在定义匿名函数时,使用了lambda演算记法

定义参数是函数的函数

➢ 函数的参数是另外一个函数


代码示例:

fun main() {
    val getDiscountWords={ goodName:String ,hour:Int->
        val currentYear =2017
        "${currentYear}年,双11${goodName}促销倒计时:$hour 小时"
    }
    showOnBoard("卫生纸",getDiscountWords)
}

fun showOnBoard(goodName: String, getDiscountWords: (String, Int) -> String) {
    val hour = (1..24).shuffled().last()
    print(getDiscountWords(goodName,hour))
}

简略写法

➢如果一个函数的lambda参数在最后,或者是唯一的参数,那么括住lambda值参数的一对圆括号就可以省略。

	
	 val getDiscountWords={ goodName:String ,hour:Int->
        val currentYear =2017
        "${currentYear}年,双11${goodName}促销倒计时:$hour 小时"
    }
    showOnBoard("卫生纸",getDiscountWords)

  //简略写法
  showOnBoard("卫生纸"){ goodName:String ,hour:Int->
        val currentYear =2017
        "${currentYear}年,双11${goodName}促销倒计时:$hour 小时"
    }
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存