Kotlin技术 - 史上全网最全的 Lambda书写形式

首先辨别 函数 匿名函数 lambda 三者关系

函数 跟匿名函数和lambda是完全不同的
匿名函数和Lambda 基本相同
函数 必须是代码块一的书写方式: fun + 函数名 ( 形参:类型 . . .): 返回值类型{ }
匿名函数 是可以赋值给一个参数的,这给参数代表的是匿名函数的引用,不是函数相当于 双冒号加方法名
lambda表达式: 我们会发现大括号里没有用 return 关键字作为返回值。因为lambda 默认会将最后一行最为返回值

代码块一:

   
   // 函数 
    fun method01(name: String): Int {
        return name.length
    }

代码块二:

	
	// 匿名函数
    val method02: (String) -> Int = fun(name: String): Int {
        return name.length
    }
    // 简写
    val method03: (String) -> Int = fun(name: String): Int = name.length
    

代码块三:

	
	// Lambda 表达式
    val method04: (String) -> Int = { name -> name.length }
    val method05: (String) -> Int = { name: String -> name.length }
    

如何表示 (String) -> Int

	
    val method1: (String) -> Int = { it.length }
    val method2: (String) -> Int = { name -> name.length }
    val method3: (String) -> Int = { name: String -> name.length }
    val method4: (String) -> Int = fun(name: String) = name.length
    val method5: (String) -> Int = fun(name: String): Int = name.length
    val method6: (String) -> Int = fun(name: String): Int { return name.length }
调用
method1.invoke("") 

如何表示 (String,String) -> Int

    val method11: (String, Int) -> Int = { name, _ -> name.length }
    val method12: (String, Int) -> Int = { _, age -> age }
    val method13: (String, Int) -> Int = { name: String, _: Int -> name.length }
    val method14: (String, Int) -> Int = fun(name: String, _: Int) = name.length
    val method15: (String, Int) -> Int = fun(name: String, _: Int): Int = name.length
    val method16: (String, Int) -> Int = fun(name: String, _: Int): Int { return name.length }
调用
method11.invoke("",0)

如何表示 (String,(String) -> Boolean) -> Int

高阶函数之 函数作为函数的参数

    val method21: (String, (String) -> Boolean) -> Int = { name, _ -> name.length }
    val method22: (String, (String) -> Boolean) -> Int =
        { _, method -> if (method.invoke("name")) 11 else 22 }
    val method23: (String, (String) -> Boolean) -> Int =
        { name, method -> if (method.invoke(name)) 11 else 22 }
    val method24: (String, (String) -> Boolean) -> Int =
        { name: String, _: (String) -> Boolean -> name.length }
    val method25: (String, (String) -> Boolean) -> Int =
        fun(name: String, _: (String) -> Boolean) = name.length
    val method26: (String, (String) -> Boolean) -> Int =
        fun(name: String, _: (String) -> Boolean): Int = name.length
    val method27: (String, (String) -> Boolean) -> Int =
        fun(name: String, _: (String) -> Boolean): Int { return name.length }
调用
// 传一个匿名函数 作为参数
method22("", fun(name: String): Boolean { return name.isNullOrBlank() })
// 传一个lambda 作为参数
i = method22.invoke("Hello", { name: String ->  name.isNullOrBlank() })

如何表示 (String) -> (Boolean) -> String

    val method31: (String) -> (Boolean) -> String = {
        fun(sex: Boolean): String { return if (sex) "男" else it }
    }
    val method32: (String) -> (Boolean) -> String =
        { name -> { sex: Boolean -> if (sex) "男" else name } }
    val method33: (String) -> (Boolean) -> String =
        { name: String -> fun(sex: Boolean) = if (sex) "男" else name }

    val method34: (String) -> (Boolean) -> String =
        fun(name: String) = fun(sex: Boolean) = if (sex) "男" else name

    val method35: (String) -> (Boolean) -> String =
        fun(name: String) = fun(sex: Boolean): String = if (sex) "男" else name

    val method36: (String) -> (Boolean) -> String =
        fun(name: String): (Boolean) -> String = fun(sex: Boolean): String = if (sex) "男" else name

调用
method31.invoke("不清楚").invoke(false)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值