Kotlin 高阶函数,匿名函数,Lambda

Kotlin 高阶函数 / 匿名函数 / Lambda

高阶函数 / 匿名函数 / Lambda

高阶函数 : 参数类型 或者 返回值函数类型的函数 ,就称作 高阶函数。

匿名函数: 函数类型的对象,可以作为参数传递, 它它它!不是函数 注意

Lambda:同理 也是一个函数类型的对象

PS:怎么使用
  • "::" 加 函数 => ‘::’ 标示函数引用,会拿到一个 函数的对象 ;注意不是函数本身!
  • 就怎么使用 匿名函数,
  • 就怎么使用 Lambda
示例代码记录
1. b 函数作为 a 函数的参数 ,需要写明 函数入参类型,以及返回值类型
    //   引用函数 参数↓ - 返回值↓  
    fun a(funParam:(Int)->String):String{
      return funParam(1)
    }
    fun b (param:Int):String{
        return param.toString()
    }
    a(::b)
    val dd = ::b

1.1 也可以写成下面这种匿名函数形式

" fun b" 中 方法名 b 可以省略

 a( fun (param:Int):String{
        return param.toString()
    })
 val dd =  fun (param:Int):String{
        return param.toString()
    }
2、Lambda 规则
2.1 如果匿名函数作为入参 ,可以写成 Lambda
    fun a(funParam:(Int)->String):String{
        return funParam(1)
    }
    //可以写成这样
    a({ param:Int->"测试001"

    })

2.2 如果 Lambda 作为,入参的最后一个函数,可以写在括号外
        a(){ param:Int->"测试001"

        }
2.3 如果 Lambda 作为唯一入参,括号也能 ’省掉‘
        a{ param:Int->"测试001"

        }
2.4 如果 Lambda 是单参的 ,这个参数也可以不写了

kotlin 对于单参数 有唯一的 默认的名字 it

        a{ "测试001"
        }
        a{ it.toString()+"测试001"
        }

PS : Lambda 的返回值是去最后一行代码的值 别写 return;

2.5、函数对象 作为返回值
    fun d (param:Int):Unit{
    }
    fun c(param: Int):(Int)->Unit{
       return ::d // 这里需要加上 ‘::’ 这样就成为了一个对象(相当于 复制了一个有函数相同功能的的对象)
    }
2.6 多参匿名函数
        //多参匿名函数
  val f = fun (parma:Int,parma2:String):String{
      return parma2+parma
  }
补充一点 :
Java8 开始支持 Lambda 表达式
  • Java 在使用 抽象方法的接口时,允许使用 lambda 表达式

  • 在 Kotlin 中就不支持这么写了,因为没有必要(可以直接传函数对象你还跟我整这事?)

  • 但在 Kotlin 和 Java 做交互的时候可以这么写

    • 是因为 Kotlin 对Java 的 抽象方法接口, Kotlin 额外创建一个,把参数转换为函数类型的桥接方法

    • 例如:

      //Java
      view.setOnClickListener(new View.OnClickListener() {
          @Override
            public void onClick(View v) {
            }
      });
      
      //Kotlin 中可以这么写
      view.setOnClickListener {
             
      }
      
      

onClick(View v) {
}
});

//Kotlin 中可以这么写
view.setOnClickListener {
       
}

```
如果有同学,有一些更高级的用法,欢迎留言交流!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值