Kotlin从入门到发疯

Kotlin笔记(七)Lambda表达式

2017-06-28  本文已影响17人  小龙哥的开发日记

什么是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类型
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) }
上一篇下一篇

猜你喜欢

热点阅读