首页 > 其他分享 >kotlin 高阶函数

kotlin 高阶函数

时间:2023-11-11 15:23:41浏览次数:32  
标签:函数 val Int kotlin sum 参数 类型 高阶

一、定义:以另一个函数作为参数或者返回值的函数

1、kotlin中,函数以lambda或者函数引用来表示

 

二、函数类型

1、如下是函数的类型

上述声明了函数的类型,括号内包含了该函数类型需要传入的参数类型,紧接着箭头,最后是返回的类型(在声明函数类型时候,返回类型即使是Unit也不可以省略)

2、函数的声明

val sum: (Int, Int) -> Int = {x, y -> x + y} // 声明sum是一个函数类型,该函数类型是:(Int, Int) -> Int ,右边对应的函数体的参数分别为x和y, 这里不用给x和y声明类型是因为在声明sum类型的时候已经指明了参数都是Int
val sum = {x: Int, y: Int -> x + y} // 左边只有sum,具体的函数类型则需要通过等号右边的函数来推导。函数体的参数x和y均指明了类型是因为如果不指明类型则无法从其他任何地方推导出他们的类型,x + y 是一个表达式,在kotlin表达式均有返回值x + y的返回值也是Int所以,sum整体推导出的类型是:(Int, Int) -> Int
val sum = {x: Int, y: Int -> println(x + y)} // 同上面,但是因为println(x + y) 返回的为Unit 所以sum推导出的类型是: (Int, Int) -> Unit
inc: (Int) -> Int = {it + 1} // 该函数和上面的类似,这里主要说明的是函数体没有显示声明参数,并且有一个it; 在kotlin的lambda这里,如果参数只有一个则可以省略,并将该参数命名为it, 所以上面和这个是等价的:val inc: (Int) -> Int = {x -> x + 1}

 

三、lambda函数类型的注意地方

1、本身不能有return语句,对于返回的值以lambda函数中的最后一句执行的表达式的值作为返回值

2、函数中,lambda作为函数的最后一个参数则可以写在函数的外面进行传入

fun <T> Collection<T>.joinToString(
    sep: String = ", ",
    prefix: String = "",
    suffix: String = "",
    transform: (T) -> String = {it.toString()} // transform是joinToString的最后一个参数
): String {
    val result = java.lang.StringBuilder(prefix)
    for ((index, element) in this.withIndex()) {
        if (index > 0) result.append(sep)
        result.append(transform(element))
    }
    result.append(suffix)
    return result.toString()
}

val letters = listOf("Alpha", "Beta")

我们正常在调用的时候,可以是:

letters.joinToString(sep = "! ", suffix = ")", transform = {it.uppercase()})

如上是咱们正常的调用方式,但是这里transform在函数的最后一个参数,如下的这种方式也是合法的

    letters.joinToString(sep = "! ", suffix = ")") {
        it.uppercase()
    }

如上写在圆括号的外面,并且当圆括号内不不传参数的时候,甚至连圆括号都可以省略

    letters.joinToString { 
        it.lowercase()
    }

 

3、上面第二点的transform函数能够作为参数传入,那么同理也能够作为返回值传出,传出的返回值函数也能够捕获函数内不的临时变量,具体可见:https://www.cnblogs.com/czwlinux/p/17799511.html的第四点:捕捉作用域中的变量

标签:函数,val,Int,kotlin,sum,参数,类型,高阶
From: https://www.cnblogs.com/czwlinux/p/17818781.html

相关文章

  • requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级
    以下代码执行后,console输出的信息是?for(leti=0;i<5;i++){requestAnimationFrame(()=>console.log(i));}01234requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级作用域,来把当前值和requestAnimationFrame放在这个作用域中......
  • matlab函数_连通区域
    ​1、matlab函数bwareaopen──删除小面积对象格式:BW2=bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。算法:(1)Determinetheconnectedcomponents. L=bwlabeln(BW,conn);(2)Computetheareaofeachcomponent. S=regionp......
  • 方法只能写在类里面,类外面的是函数 ; 定义函数只能function a(){} 或者 var a = funct
    下列哪几项可以创建函数?Afunction=myFunction(){……..}BfunctionmyFunction(){…...}Cmyfunction=function(){…….}DmyFunction(){….}正确答案:BCBC不谈,我说一下DD这个语法定义的是方法(method)。因为这种写法只能在class里生效,所以D这个function始终是跟一个object......
  • js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继
    js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承,以及ES6新增的class继承,但不包括关联继承https://www.cnblogs.com/Leophen/p/11401734.html构造函数继承是每次继承都会把父类的所有属性方法全部拷贝一份,而对于公用的方法......
  • matlab 字符串处理函数
    ​ %字符串处理a=' a';b='b b';c='cccc';m=''%获取字符串长度length(a)    %连接两个字符串,每个字符串最右边的空格被裁切d=strcat(a,c) length(d)%连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格%使与最长字符串相等,会忽略空字符串e=s......
  • go 1.6 废弃 io/ioutil 包后的替换函数
      go1.6废弃io/ioutil 包后的替换函数 io/ioutil替代 ioutil.ReadAll->io.ReadAllioutil.ReadFile->os.ReadFileioutil.ReadDir->os.ReadDir//othersioutil.NopCloser->io.NopCloserioutil.ReadDir->os.ReadDirioutil.TempDir->os.Mkdi......
  • 【4.0】Go语言语法基础之函数
    【一】函数基础【1】语法func关键字函数名(形参1形参1的类型,形参2形参2的类型)(返回值类型){函数体(函数体的内容和缩进无关,只要是在大括号内,都是函数体内容)}在Python中需要先定义函数再使用在Go中不需要先定义再使用funcmain(){}【2】无参数无返回值......
  • MySQL SUBSTRING() 函数
    语法SUBSTRING(string,start,length)参数值参数必填描述string必需要从中提取的字符串start必需起始位置。可以是正数也可以是负数。如果是正数,此函数从字符串的开头提取。如果是负数,此函数从字符串的末尾提取;字符串索引从1开始length可选要提取的字......
  • MATLAB中的disp函数
    disp函数会直接将内容输出在Matlab命令窗口中,比如:par1=csvread('front_surface_pressure_005.csv',1,0);disp(par1);运行之后,会在命令窗口输出 front_surface_pressure_005.csv 文件中的数据内容:-0.014801.38680.053941.3740109.3200-0......
  • pyqt5-自定义函数优化管理组件
    1、介绍pyqt本身提供了诸多的方法和事件特性,可以操作ui组件。对于单一的项目或者说具有个人风格的开发者来说,在此基础上进行整合可以优化代码。整合,这里特指的是ui组件。可能是ui的显示和初始化,也可能是相关的业务代码。2、测试和总结函数中的ui组件可以调用设置值或获取的......