Kotlin 函数 与 lambda 表达式
一、函数
代码块函数体:
fun sum(x: Int, y: Int): Int {
return x + y
}
表达式函数体:
fun sum(x: Int, y: Int) = x + y
使用表达式函数体,一般情况下可以不声明返回值类型。在一些诸如递归等复杂情况下,即使是使用表达式函数体,也必须显示声明返回值类型。
总结:
- 函数参数必须显示声明类型
- 非表达式函数体,函数参数必须显示声明类型, 返回值除了类型是 Unit,可以省略,其它情况,返回值都必须显示声明类型
- 如果它是一个递归的函数,必须显示声明参数和返回值类型
- 如果它是一个公有方法,为了代码的可读性,尽量显示声明函数参数和返回值类型
二、函数类型
Kotlin 中,函数类型的格式如下:
() -> Unit
Kotlin 中,函数类型声明必须遵循以下几点:
- 通过 -> 符号来组织参数类型和返回值类型。左边是参数类型,右边是返回值类型
- 必须用一个括号来包裹参数类型
- 返回值类型即使是 Unit, 也必须显示声明。
使用::对某个类的方法进行引用,比如:
class A {
fun test()
}
我们可以使用如下方式保持对 test() 方法的引用
val a = A () // 创建类的对象
val f = a::test // 通过对象引用方法
f.invike() // 调用方法
三、lambda 表达式
val sum: (Int, Int) -> Int = {x: Int, y: Int -> x + y}
由于支持类型推导,可以简化为
val sum: (Int, Int) -> Int = {x, y -> x + y}
或者:
val sum = {x: Int, y: Int -> x + y}
lambda 表达式语法:
- lambda 表达式必须通过 {} 来包裹
- 如果 lambda 声明了参数部分的类型,且返回值支持类型推导,则 lambda 表达式变量就可以省略函数类型声明
- 如果 lambda 变量声明了函数类型,那么 lambda 表达式的参数部分的类型就可以省略
- 如果 lambda 表达式返回的不是 Unit 类型,则默认最后一行表达式的值类型就是返回值类型。
函数 和 lambda表达式
- fun 在没有等号、只有花括号的情况下,就是代码块函数体,如果返回值非 Unit,必须带 return
fun foo(x: Int) {
print(x)
}
fun foo(x: Int, y: Int): Int {
return x + y
}
- fun 带有等号,没有花括号,是单表达式函数体,可以省略 return
fun foo(x: Int, y: Int) = x + y
- 不管是用 val 还是 fun 声明,如果是等号加花括号的语法,就是声明一个 lambda 表达式。
val foo = { x: Int, y: Int ->
x + y
}
// 调用方式: foo.invoke(1, 2) 或者 foo(1, 2)
fun foo(x: Int) = { y: Int ->
x + y
}
// 调用方式: foo(1).invoke(2) 或者 foo(1)(2)
- lambda 表达式自调用
{x: Int, y: Int -> x + y}(1, 2)
Kotlin 函数 与 lambda 表达式的更多相关文章
- Kotlin函数与Lambda表达式深入
Kotlin函数: 关于Kotlin函数在之前也一直在用,用fun来声明,回忆下: 下面再来整体对Kotlin的函数进行一个学习. 默认参数(default arguments): 先来定义一个函数: ...
- Kotlin语法(函数和lambda表达式)
三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...
- 《疯狂Kotlin讲义》读书笔记6——函数和Lambda表达式
函数和Lambda表达式 Kotlin融合了面向过程语言和面向对象语言的特征,相比于Java,它增加了对函数式编程的支持,支持定义函数.调用函数.相比于C语言,Kotlin支持局部函数(Lambda表 ...
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- 委托,匿名函数和lambda表达式
很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...
- 匿名函数:Lambda表达式和匿名方法
匿名函数一个"内联"语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. 共有两种匿名函数: Lamb ...
- python函数,lambda表达式,三目运算,列表解析,递归
一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...
- python3 入门 (三) 函数与lambda表达式、闭包
函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...
- 3 委托、匿名函数、lambda表达式
委托.匿名函数.lambda表达式 在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法.C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方 ...
- C#语法之匿名函数和Lambda表达式
上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...
随机推荐
- log4j-漏洞修复
Log4j漏洞修复 修复参考文档:https://www.cert.org.cn/publish/main/9/2021/20211215154225883558274/202112151542258 ...
- 模块化Common.js与ES6
为什么要模块化开发 1. 依赖关系(a文件依赖b文件中的方法,b文件必须在a文件之前引入) 2. 命名问题 (多个文件变量名,方法名相同会出现覆盖) 3. 代码组织(后期不好维护) 模块化规范有 1. ...
- axios取消请求
为什么会有取消请求-文件上传 比如有这样的场景,在一个弹窗中有文件上传. 当用户进行文件上传的时候,发现不想进行文件上传了,又点击了弹窗中的取消. 那么是不是应该去取消本次的上传操作,此时就需要使用取 ...
- 【VictoriaMetrics】一个小优化:循环改查表,性能提升56.48 倍
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 做了一个 vm-storage 数据文件 merge 的工 ...
- 数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}
题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池 相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据 ...
- CE修改器入门:查找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的 ...
- 解决线程不安全的方式(Java)
一.同步代码块 package com.synchronized1; // 买票示例 // 使用同步代码块解决线程安全问题 public class TicketRunnableImp impleme ...
- MyBatis 源码系列:MyBatis 解析配置文件、二级缓存、SQL
解析全局配置文件 启动流程分析 String resource = "mybatis-config.xml"; //将XML配置文件构建为Configuration配置类 read ...
- 使用symbolicatecrash工具符号化Crash日志
对于打包上线的APP,或者打包测试的APP,出现了崩溃并不能方便的把手机链接到电脑使用XCode自动符号化,此时手动符号化就是重要的选项. 1.查找符号化工具symbolicatecrash find ...
- 装机不再无聊了:Win11首次开机添加“冲浪”小游戏
为了让大家装机过程不再无聊,微软居然在Win11的开机中加入了一个小游戏. 据The Verge报道,微软Surface Laptop Studio 2首次开机配置时,如果有需要用户等待的流程,就弹出 ...