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) }
相关文章推荐
- 《转》Kotlin开发安卓APP笔记-函数和lambda表达式(3)
- Lambda表达式 笔记(一)
- Lambda 表达式笔记
- python学习笔记四:lambda表达式和switch
- java lambda表达式 闭包学习笔记
- 学习笔记之在 LINQ 外部使用 Lambda 表达式(C# 编程指南)
- Lambda 表达式笔记
- java lambda表达式学习笔记
- Lambda表达式学习笔记
- C# in Depth Third Edition 学习笔记-- Lambda表达式和表达式树
- 第八章(3)-委托的匿名方法与Lambda表达式-学习笔记
- C#特性 学习笔记(Lambda表达式 迭代)
- 黑马程序员之C#学习笔记: Lambda表达式学习总结
- C#笔记(四):Lambda 表达式
- 【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
- C#学习笔记 - Lambda表达式
- 闭包,lambda表达式之学习笔记
- Python学习笔记(十二):lambda表达式与函数式编程
- 学习笔记之Lambda 表达式(C# 编程指南)
- 【Python学习笔记】 lambda表达式学习