美文网首页
kotlin 函数

kotlin 函数

作者: 雨来 | 来源:发表于2022-08-24 09:44 被阅读0次

    类型的理解

    class User {
        val a:Int = 0
        val b:String = ""
        lateinit var c:(Int,Int)->Int  //将变量定义为函数类型  参数类型是 Int,Int 返回值是Int
    }
    

    1、kotlin 中有 类型 如 Int 、String 和java的区别是,一个函数也可以当做类型(像Int,String一样), 那么 我们可以定义一个变量是函数类型的,比如上面的 c

    lateinit var c:(Int,Int)->Int 
    

    这个变量 的类型是 (Int,Int)-> Int 这个变量接收两个Int类型的参数返回值是Int
    因为这个c 只是声明了,没有具体的实现(也可以认为它没有赋值) 我们可以把它当作 java中的抽象方法(这样讲也不太准确)
    1.1 如何使用这个函数

     var user = User()
    //下面这个语句是在给 c 这个变量(是函数类型的)赋值
       user.c = {
           num1,num2->
           num1*num2
       }
       var c = user.c(20, 30)
       println(c)
    

    1.2 类型是函数的有实现的变量

    class User {
        val d:(Int,Int)->Int={
            num1,num2->
            num1*num2
        }
    
    

    上面是定义了类型是函数类型的常量 d (因为被val修饰 ide 不允许我们再重新定义它的实现逻辑了)
    我在调用处理重新定义逻辑后 ide会报错


    image.png
    image.png

    2、高阶函数

     /**
         * 我们思考一个问题 高阶函数 参数是 函数类型的 参数 如果也有参数(因为这个参数也是一个方法)如何传值 为什么没有办法直接传值,而还依赖于这个高阶函数呢
         */
        fun topMethod(num1:Int,num2:Int,method:(Int,Int)->Int): Int {
           return method(num1,num2)
        }
    

    2.1使用

    fun main() {
        var user = User()
        val result = user.topMethod(30, 25) { num1, num2 ->
            num1 * num2
        }
        println(result)
    }
    

    参考:
    https://zhuanlan.zhihu.com/p/495402574

    我的疑问和总结:

    fun highMethod1(func:(Int,Int)->Int): Int {
            //这种高阶函数的做用是什么
            //通地计算把这两个参数的值传过去 (下面传的 20和 30 是通过我通过逻辑(我们可以根据自己的业务)计算给的 20和 30 这两个值)
           return func(20,30);
        }
    

    使用

     Three().highMethod1 { i, i2 ->
            println("i的值是:$i,i2的值是:$i2")
            i*i2  //方法的定义已经确定了是否有返回值
        }
    

    相关文章

      网友评论

          本文标题:kotlin 函数

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