您的位置:首页 > 其它

Kotlin笔记(八)Lambda表达式

2017-06-11 11:57 204 查看

什么是Lambda表达式 ?

答:匿名函数 (what?没错就是匿名函数)

问:啥是匿名函数?

答:看下面(^^!!!)

表达式声明

// {[参数列表] -> [函数体,最后一行是返回值]}

// () -> Unit 无参返回值为Unit

// (Int) -> Int 传入整型,返回一个整型

我们先来看一个Kotlin里的函数

//这是一个计算两数相加的函数(看不懂那就看一下我前面的文章)
fun add(num1 : Int , num2 : Int):Int{

return num1 + num2
}


第一种简化

//匿名函数 = 后面只能跟一个表达式
var num1 = fun (arg1 : Int,arg2 : Int) = arg1 + arg2

var num2 = fun (arg1 : Int,arg2 : Int) =
if(arg1 > 10){
arg1 - arg2
}else{
arg1 + arg2
}


第二种简化

//后面可以写一个表达式或者多个
//把 )= 变成了 ->
var sum3 =  {arg1 : Int , arg2 : Int ->arg1 + arg2}

//注意最后一行是返回值
var sum4 =  {arg1 : Int , arg2 : Int ->
print("-----11111111111")
arg1 + arg2
}


或者

//这种写法是没有返回值的情况
var printHello = {
print("Hello")
print("bbbb")
}


或者

//suma是名称(Int,Int) -> Int先把类型和返回类型声明出来
val suma : (Int,Int) -> Int = {x,y -> x+y}


再看一个关于数组的遍历

//声明一个数组
var intArray : Array<Int> = arrayOf(1,2,3,4,5)
//遍历数组方式一
intArray.forEach { elempent -> print(elempent) }
//遍历数组方式二
intArray.forEach { print(it) }


我们先看第一种遍历方式:我们直接在参数里传了一个lambda表达式,我们来看一下forEach方法原码

//大家看参数是一个lambda类型
public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
for (element in this) action(element)
}


我们再来看遍历方式二

it:单个参数的隐式名称

如果函数字面值只有一个参数, 那么它的声明可以省略(连同 ->),其名称是 it。

intArray.forEach { print(it) }


这些约定可以写LINQ-风格的代码:

intArray.forEach { ele -> print(ele) }
//省略了 ele -> 因为只有一个参数
ntArray.forEach  { print(it) }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: