Kotlin day05-Lambda表达式

目录

什么是Lambda表达式

Lambda表达式的应用

替换局部函数

Lambda表达式的脱离

Lambda表达式的调用

Lambda特殊情况


什么是Lambda表达式

  • Lambda表达式是现代编程语言引入的一种新语法,它是一种更加灵活的代码块,在程序中被调用和传递
  • Lambda表达式总是出现在大括号中
  • Lambda无需指定函数名
  • Lambda无法指定返回值类型,此时可以用匿名函数代替
  • ->之前是Lambda的参数列表,之后是执行体
  • 标准语法

{

          形参列表->零到多条可执行语句

    }

Lambda表达式的应用

替换局部函数

普通局部函数这样定义

 fun method07(type:String,x:Int,y:Int):Int{
        fun add(x: Int,y: Int):Int{
            return x+y
        }
        when(type){
            "加"->{
               return add(x,y)
            }
            else->{
                return add(x,y)
            }
        }
    }

Lambda简化

   var n1=method11("减")
   Log.e("sujd====", n1(10,10).toString())


    fun method11(type:String):(Int,Int)->Int{
        when(type){
            "加"->{
                return {x,y:Int->x+y}
            }
            else->{
                return {x,y:Int->x-y}
            }
        }
    }

 

Lambda表达式的脱离

Log.e("sujd====", list.size.toString())

var list =ArrayList<(Int)->Int>()
fun method12(method: (Int) -> Int){
        list.add(method)
    }

 

 Lambda表达式的调用

  • 方式一:把Lambda表达式赋值给method13变量,然后调用该变量
Log.e("sujd====", method13(10,20).toString())

var method13={x:Int,y:Int->x+y}
  • 方式二:不进行赋值,直接声明直接赋值,调用
Log.e("sujd====", method14.toString())
   
 var method14={
        x:Int,y:Int->x+y
    }(20,30)

kotlin可以根据Lambda表达式推断数据类型,此时可以省略形参类型进行

var method15:(Int,Int)->Int={x,y->x+y}

如果只有一个形参x,那么面的Lambda表达还可以再次简写,用it代替

var method16:(Int)->Int={it+it}

 

Lambda特殊情况

如果在函数的最后,接收的lambda表达式,如调用系统的:

var list2= listOf<String>("数据1","数据2")
var method17=list2.dropWhile({e->e.length>3})
也可以把Lambda表达式卸载中括号的外面
var method18=list2.dropWhile(){e->e.length>3}

 

Lambda表达式和匿名函数

Lambda表达式不能指定返回值类型,可以用匿名函数代替Lambda表达式

Log.e("sujd====", method19(10000).toString())
var method19=fun(x:Int):Int{return x}

匿名函数的return和Lambda的return的区别:

  • 匿名函数的return
var testList= listOf<Int>(1,2,3,4,5)
 
       testList.forEach(fun(n){
            Log.e("sujd====", "${n}")
            return
        })
  • Lambda的return
var testList= listOf<Int>(1,2,3,4,5)
        testList.forEach({
            n->Log.e("sujd====", "${n}")
            return
        })

区别在于,匿名函数的return输出1,2,3,4,5

Lambda的return只能输出1,

因为你们函数的return返回的是函数本身

Lambda的return返回的是它所在的函数

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小苏的小小苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值