美文网首页
认识kotlin中的lambda表达式

认识kotlin中的lambda表达式

作者: BlueSocks | 来源:发表于2022-10-24 22:07 被阅读0次

    当我从 Java 过渡到 Kotlin 时,我注意到除了消除样板代码之外,lambda 表达式是 Kotlin 语言中最强大的工具之一,也是真正简化 android 开发过程的高阶函数之一,在本文中,我将教你一些我学到的基本知识,让你不仅在 Kotlin 中而且在其他语言中也开始使用 lambda。

    什么是 lambda?

    最简单的定义:Lambda 是作为表达式传递的匿名函数。就这么简单明了。因此,将它们作为参数传递给方法,返回它们或执行我们通常对正常对象执行的任何操作都相当容易。

    让我们开始吧:

    这是一个简单的函数,您无需使用 Lambda 表达式即可关联

    class Lambda {
    
        companion object{
    
            fun sum3(num1 :Int, num2:Int):Int{
                return num1 + num2
            }
        }
    
    }
    
    fun main(args:Array<String>){
    
        val sum_output = Lambda.sum3(4 ,6)
        print(sum_output)
    }
    

    上面是一个简单的函数,它采用两个整数参数将它们相加,并以整数的形式返回总和。

    现在,让我们将等效函数视为 lambda 表达式。

    class Lambda {
    
        companion object{
    
            val sum:(Int,Int) -> Int = {x:Int,y:Int -> x + y}
        }
    
    }
    
    fun main(args:Array<String>){
        val sum_output = Lambda.sum(5,6)
        println(sum_output)
    
    }
    

    让我们来分解一下:

    在我们的例子中,参数声明我们的表达式采用两个整数类型的值

    然后是箭头符号,然后是要返回的返回类型。请注意,如果表达式不返回任何内容,则返回类型应为 Unit

    我们定义我们的两个变量和要执行的操作,此表达式可以进一步简化,以使其更短并消除冗余。

    class Lambda {
    
        companion object{
    
            val sum = {x : Int, y : Int -> x + y}
        }
    
    }
    
    fun main(args:Array<String>){
        val sum_output = Lambda.sum(5,6)
        println(sum_output)
    
    }
    

    在这里,Kotlin 编译自我计算并返回两个值的总和。lambda 中唯一非可选的部分是代码正文。

    不返回任何值的 Lambdas

    不返回任何值的 Lambda 使用 unit 关键字显式告诉编译器此表达式不返回任何值

    class Lambda {
    
        companion object{
    
           //        This expressions do not return anything
            val noReturn : (Int) -> Unit = { num -> println(num * num) }
    
            val n : (String) -> Unit = {name -> println(name)}
        }
    
    }
    
    fun main(args:Array<String>){
    
        Lambda.noReturn(4)
    
        Lambda.myName("Peter")
    }
    

    相关文章

      网友评论

          本文标题:认识kotlin中的lambda表达式

          本文链接:https://www.haomeiwen.com/subject/vtxnzrtx.html