首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin函数 ③ ( 匿名函数 | 匿名函数函数类型 | 匿名函数隐式返回 )

文章目录 一、匿名函数 二、匿名函数函数类型 三、匿名函数隐式返回 一、匿名函数 ---- 声明函数时 , 没有 函数函数 是 匿名函数 ; 匿名函数 可以作为 函数参数 , 也可以作为 函数返回值...; 匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库函数 ; Kotlin 对 CharSequence 类进行了扩展 , 定义了 count(predicate: (Char) ->...Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型函数 , 用于 返回匹配给定 匿名函数 字符数 ; /** * 返回匹配给定[谓词 predicate 匿名函数..., 传入了 匿名函数 { letter-> letter == 'l' } 作为参数 , 其作用是 返回 "Hello" 字符串 , 字符符合 letter == 'l' 要求字符个数 ; fun...关键字 , 返回返回值 ; 匿名函数 返回值 不需要使用 return 关键字 , 匿名函数 可以 隐式 返回 函数体最后一行语句 ; 代码示例 : 在匿名函数 , 第一行是 Int 值 , 第二行是

3K20
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈Kotlin函数

1.表达式函数体 通过下面这个简单例子看下函数声明相关概念,函数声明关键字是fun,嗯,比JSfunction还简单。 Kotlin参数类型是放在变量:后面,函数返回类型也是。...这个函数把集合以某种格式输出,而不是默认toString()。 是泛型,在这里形参集合元素都是T类型。返回String类型。...从编译器角度看,Lambda是一个代码块不是一个对象,不能把它当成对象引用。Lambdathis引用指向是包围它类。 如果在Lambda要用到常规意义上this呢?这个就需要带接收者函数。...toString() } with返回值是执行Lambda代码结果,该结果是Lambda最后一个表达式值。如果想返回是接收者对象,而不是执行Lambda结果,需要用apply函数。...11.apply函数 apply函数几乎和with函数一模一样,唯一区别就是apply始终返回作为实参传递给它对象,也就是接收者对象

2.5K20

Kotlin内联函数

Kotlin内联函数还是挺好玩 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外类就会被创建。...并且如果 lambda捕捉了某个变量, 那么每次调用时候都会创建一个新对象。 这会带来运行时额外开销,导致使用 lambda 比使用一个直接执行相同代码函数效率更低 。 内联函数作用是啥?...,编译时不会构建匿名对象,所以, 上述main函数编译之后字节码等同于: fun main(args: Array) { println("执行 synchronized 之前") val...Int、Long、Double都继承自Number,但是,如果我们在调用上面的函数时,传入了Array,这样是会报错!!...因为 kotlin在调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数内联函数.

1.5K20

Kotlin 协程】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值弊端 | 尝试在 sequence 调用挂起函数返回多个返回值 | 协程调用挂起函数返回集合 )

文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值弊端 三、尝试在 sequence 调用挂起函数返回多个返回值 四、协程调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...在 Kotlin 协程 Coroutine , 使用 suspend 挂起函数 以异步方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程挂起和恢复 ① ( 协程挂起和恢复概念...SequenceScope 对象方法 ; 在该匿名函数 , 不能调用 SequenceScope 之外定义挂起函数 , 这样做是为了保证该类执行性能 ; /** * 构建一个[Sequence..., 该函数就会变成 SequenceScope 扩展函数 , SequenceScope 类扩展函数是限制挂起 , 只要是 SequenceScope , 如果要调用挂起函数 , 只能调用其已有的挂起函数...---- 如果要 以异步方式 返回多个返回值 , 可以在协程调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断 先后 返回 多个 返回值 ; 代码示例 : package

8.2K30

Kotlin函数 ② ( Unit 函数 | TODO 函数抛出异常返回 Nothing 类型 | 反引号函数名 )

文章目录 一、Unit 函数 二、TODO 函数抛出异常返回 Nothing 类型 三、反引号函数名 一、Unit 函数 ---- Java 语言 没有返回函数返回类型 是 void ;...Kotlin 语言 没有返回函数返回类型是 Unit , 该函数又称为 Unit 函数 ; Kotlin 语言中 推出 Unit 类型概念 , 是为了 兼容 泛型 概念 , 如果 函数没有返回值..., 就可以 忽略该类型 , 返回 void , 但是在 泛型 概念 , 必须有一个确定 类型 , 因此这里引入 Unit 类型 ; 代码示例 : 在下面代码 hello() 函数返回值类型是...println("Hello") } 执行结果 : Hello kotlin.Unit 二、TODO 函数抛出异常返回 Nothing 类型 ---- 在 Kotlin 有一种函数 TODO 函数...反引号 ; 注意 Kotlin 和 Java 关键字不同 , 不管是哪个语言关键字 , 都不能作为函数名 , 但是如果将关键字 使用反引号 括起来 , 就可以使用其作为函数名 ; 代码示例 :

82620

Kotlin尾递归函数

Kotlin尾递归函数理解 kotlin,如果某个函数末尾又调用了函数自身,这种就称为尾递归函数。 尾递归函数需要在 fun 前面添加 tailrec。...尾递归函数会使用循环方式替代递归,从而避免栈溢出。 尾递归不能在异常处理try、 catch 、 finally 块中使用 。...findFixPoint(x: Double = 1.0): Double = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x)) 再例如: 计算阶乘函数...//定义计算阶乘函数 fun fact (n : Int) : Int{ if (n == 1) { return l } else { return n * fact(n - 1) } } 上面函数将调用自身作为其执行体最后一行代码...此时,上面函数可改为如下形式 //使用尾递归函数语法 tailrec fun factRec(n: Int, total : Int= 1): Int = if (n == 1) total else

77910

Golang 函数返回类型是接口时返回对象指针还是值

1.接口简介 Interface 是一组抽象方法(未具体实现方法,仅包含方法名参数返回方法)集合,如果实现了 interface 所有方法,即该类型就实现了该接口。...接口声明格式: type InterfaceName interface { //方法列表 } 2.函数返回类型是接口时返回对象指针还是值 函数返回类型是接口时返回对象指针还是值,这个要看具体需要...期望原对象在后续操作中被修改则返回对象指针。返回对象值则返回对象副本,对对象副本修改不会影响原对象返回对象指针示例。...=createEmployeeObj() o.Set() o.Print() e.Print() } 输出结果: company=alibaba company=alibaba 可见函数返回类型是接口时返回对象指针...company="alibaba" e1.Print() } e.Print() } 输出结果: company=alibaba company=tencent 可见函数返回类型是接口时返回对象

7.9K30

Kotlin函数 ⑧ ( 函数引用 作为函数参数 | ::函数名 | 函数类型 作为函数返回值类型 )

, 匿名函数 没有函数名 ; 代码示例 : 在下面的代码 , 首先使用 actionFun 函数类型变量 作为 studentDoSomething 函数参数 , 该变量值是一个 匿名函数 Lambda...---- 函数 返回值类型 , 也可以是 函数类型 ; 也就是说 匿名函数 , Lambda 表达式 可以作为 函数返回值 ; 代码示例 : 下面的代码 , returnFun 函数返回值...是一个函数类型 (String)->String , 返回是一个 匿名函数 Lambda 表达式 ; 使用 var fun0 变量 接收 上述函数 返回 Lambda 表达式 , 并执行该 匿名函数...; fun main() { // 接收函数类型返回值 var fun0 = returnFun(); // 执行 返回 函数 var str = fun0("Tom...") println(str) } // 函数返回值 是函数类型 fun returnFun(): (String)->String { return { name: String

2.6K10

Kotlin高阶函数深入讲解

前言 在Kotlin,高阶函数是指将一个函数作为另一个函数参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。...Kotlin为开发者提供了丰富高阶函数,比如Standard.ktlet、with、apply等,_Collectioins.ktforEach等。...常用高阶函数 Kotlin提供了很多高阶函数,这里根据这些高阶函数所在文件位置,分别进行介绍,先来看一下常用高阶函数,这些高阶函数在Standard.kt文件。...also函数返回泛型T对象本身,不同是also函数接收lambda表达式需要接收一个参数T,所以在lambda表达式内部,可以使用it,而apply只能使用this。...takeIf、takeUnless这一对都是根据接收lambda表达式返回值,决定函数最终返回值是对象本身,还是null,区别是takeIf,如果lambda表达式返回true,返回对象本身,否则返回

1.1K20

Kotlinsam(函数式接口)详解

OnClickListener接口只有一个抽象方法,这种接口在kotlin中被当作函数式接口,或者SAM接口,SAM代表单抽象方法,类似的还有像Runnable和Callable这样函数式接口....println(42) } }) 但实际不一样是,每次调用这种语句会重复创建Runnable对象,而使用lambda表达式作为实参如果没有访问任何来自定义它函数变量那么只会创建一个对象....SAM构造方法:显式地把lambda转换成函数式接口. 在有的方法需要返回一个函数式接口,不能返回一个lambda, 可以用SAM构造方法把它包装起来....SAM构造方法只接收一个参数-一个被用作函数式接口单抽象方法体lambda,并返回一个接口类实例....另外除了返回值通过lambda创建函数式接口外,也可以把lambda生成函数式接口放在一个变量,如下 val listener = OnClickListener{ view - val text

1.6K40

SpringBoot返回枚举对象所有属性以对象形式返回(一个@JSONType解决)

一、前言 最近小编在开发遇到个问题,就是关于枚举方面的使用。一些固定不变数据我们可以通过枚举来定义,减少对数据库查询。是一种常见开发技巧!...常见场景需求是:通过某一个属性获取对应枚举属性另一个值;还有就是常量枚举,比如一下统一返回状态和编码! ==小编需求是把枚举所有属性都取出来,转成实体类那种返回给前端!...== 最简单解决就是拿到所有的然后便利加到新集合里,这样还需要定义一个实体类来接收转一下!...这样有点麻烦,小编也是无意发现了,项目中有以前大佬留下来一个注解@JSONType(serializeEnumAsJavaBean = true),一加上只需要我们使用枚举.values()即可直接帮助我们返回

3.4K10

python函数返回值详解

1.返回值介绍 现实生活场景: 我给儿子10块钱,让他给我买包烟。...这个例子,10块钱是我给儿子,就相当于调用函数时传递到参数,让儿子买烟这个事情最终目标是,让他把烟给你带回来然后给你对么,,,此时烟就是返回值 开发场景: 定义了一个函数,完成了获取室内温度,...想一想是不是应该把这个结果给调用者,只有调用者拥有了这个返回值,才能够根据当前温度做适当调整 综上所述: 所谓“返回值”,就是程序函数完成一件事情后,最后给调用者结果 2.带有返回函数 想要在函数把结果返回给调用者....保存函数返回值 在本小节刚开始时候,说过“买烟”例子,最后儿子给你烟时,你一定是从儿子手中接过来 对么,程序也是如此,如果一个函数返回了一个数据,那么想要用这个数据,那么就需要保存 保存函数返回值示例如下...5.在python我们可不可以返回多个值?

3.2K20

浅析 SpringMVC 返回对象循环引用问题

@RestController、@ResponseBody 等注解是我们在写 Web 应用时打交道最多注解了,我们经常有这样需求:返回一个对象给前端,SpringMVC 帮助我们序列化成 JSON...而今天我要分享的话题也不是什么高深内容,那就是返回对象存在循环引用时问题探讨。 该问题非常简单容易复现,直接上代码。...中直接返回存在循环引用对象: @RestController public class HelloController { @RequestMapping("/hello") public...这样标识,解决了循环引用问题,如果继续使用 fastjson 反序列化,依旧可以解析成同一对象,其实我在之前文章已经介绍过这一特性了《gson 替换 fastjson 引发线上问题分析》。...使用 FastJsonHttpMessageConverter 可以彻底规避掉循环引用问题,这对于返回类型不固定场景十分有帮助,而 @JsonIgnore 只能作用于那些固定结构循环引用对象上。

5.9K30
领券