kotlin 函数

2022-08-24  本文已影响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  //方法的定义已经确定了是否有返回值
    }
上一篇下一篇

猜你喜欢

热点阅读