kotlin 中 lambda 表达式的 return 行为

代码星河客
• 阅读 9134

kotlin 带来了许多新的语法(糖?),同时也带来了许多懵逼的地方,看 《kotlin 实战》一书时就被各种 return 的行为搞懵逼了。

在 lambda 表达式中,如果没有显式的 return 语句,那么最后一个表达式就是返回的值。这一行为只有 lambda 表达式才有,常规方法和匿名方法都没有,因为在 kotlin 中 lambda 是做为表达式的存在,表达式一定会有值。

kotlin 中 lambda 表达式的 return 行为

那么如果在 lambda 中显示返回值呢?上面的 foo 函数不是 inline 函数, lambda 是不能显式
return 的,文档中叫做 non-local return 也就是结束 lambda 的调用。

kotlin 中 lambda 表达式的 return 行为

如果把 foo 定义成 inline 函数,那么 lambda 可以显式 return 了,不过 return 的是 foo 函数, 而且只能 return Unit,因为 return 的是 foo 函数,并且 foo 函数的定义就是没有返回值。
从下面的代码中可以看到并没有输出 "foo return",foo 函数返回了,并且 return 后面不能有其他值。这里看不到 Unit 的输出。

kotlin 中 lambda 表达式的 return 行为

那么 lambda 怎么显示 return 呢?我并不要求表达式的值,只是想要结束调用而已。比如打印只 1..10 中的偶数。
如果我们想结束 lambda 的调用,需要给 lambda 加上标签,并用相同的标签修饰 return。

kotlin 中 lambda 表达式的 return 行为

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 8 lambda表达式中的异常处理
java8lambda表达式中的异常处理简介java8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的FunctionalInterface并没有很好的处理异常,因为JDK提供的这些FunctionalInterface通常都是没有抛出异常的,这意味着需要我们自
Stella981 Stella981
3年前
Kotlin中类似java的静态方法
在java中,我们在写一些静态方法时会这样写:publicclassUtils{publicstaticStringgetName(){return"yiifox";}}在Kotlin中没有静态方法一说,网上大多说使用伴生对象来模拟静态方法,其实这种
Wesley13 Wesley13
3年前
Java8 新增特性 Lambda表达式
               聊聊Lambda  背景:    早在2014年oracle发布了jdk8,在里面增加了lambda模块。于是java程序员们又多了一种新的编程方式:函数式编程,也就是lambda表达式。    以下整理关于Lambda表达式资料(转载地址:https:/
Wesley13 Wesley13
3年前
Java 8中你可能没听过的10个新特性
lambda表达式,lambda表达式,还是lambda表达式。一提到Java8就只能听到这个,但这不过是其中的一个新功能而已,Java8还有许多新的特性——有一些功能强大的新类或者新的用法,还有一些功能则是早就应该加到Java里了。这里我准备介绍它的10个我个人认为非常值得了解的新特性。总会有一款适合你的,开始来看下吧。default方法
Wesley13 Wesley13
3年前
Java 8 Lambda表达式的使用
lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。JavaSE8添加了2个对集合数据进行批量操作的包:java.util.function包以及java.util.stre
Wesley13 Wesley13
3年前
Java 8 中的 Lambda 表达式 vs. Kotlin 中的 Lambda
直接上一段Kotlin的函数式编程的代码:packagecom.easykotlin.lec02funsum1(x:Int,y:Int):Int{returnxy}funsum2(x:Int,y:Int)xy//
Wesley13 Wesley13
3年前
Java8—一万字的Lambda表达式的详细介绍与应用案例
  基于Java8详细介绍了lambda表达式的语法与使用,以及方法引用、函数式接口、lambda复合等Java8的新特性!文章目录1Lambda的概述2函数式接口2.1Consumer消费型接口2.2Supplier供给型接口2.3Function<T,R函数型接口
Stella981 Stella981
3年前
Python3——匿名函数
没有名字的函数,不用写return,返回值就是该表达式的结果。语法:lambda参数:方法(或三元运算)lambdax:xx等同于deff(x):returnxx普通函数defcalc(x,y):ifxy:retur
Stella981 Stella981
3年前
Kotlin代码检查在美团的探索与实践
背景Kotlin有着诸多的特性,比如空指针安全、方法扩展、支持函数式编程、丰富的语法糖等。这些特性使得Kotlin的代码比Java简洁优雅许多,提高了代码的可读性和可维护性,节省了开发时间,提高了开发效率。这也是我们团队转向Kotlin的原因,但是在实际的使用过程中,我们发现看似写法简单的Kotlin代码,可能隐藏着不容忽视的额外开销。本文剖析了K
小万哥 小万哥
11个月前
Kotlin 布尔值教程:深入理解与应用示例
Kotlin中的布尔值是一种数据类型,仅能存储true或false两种状态,适用于表示二选一的情况,如开关或真假判断。布尔类型可通过Boolean关键字声明,并直接赋值为true或false。此外,Kotlin支持使用比较运算符创建布尔表达式,用于条件判断。条件语句包括if、else和elseif,允许根据不同条件执行特定代码块。特别地,在Kotlin中,if..else结构不仅能作为语句使用,还能作为表达式,即可以在条件判断的同时返回一个值。这种灵活性使得Kotlin在处理条件逻辑时更为简洁高效。
小白学大数据 小白学大数据
7个月前
正则表达式在Kotlin中的应用:提取图片链接
在现代的Web开发中,经常需要从网页内容中提取特定的数据,例如图片链接。Kotlin作为一种现代的编程语言,提供了强大的网络请求和文本处理能力。本文将介绍如何使用Kotlin结合正则表达式来提取网页中的图片链接。正则表达式基础正则表达式是一种强大的文本处理