【Kotlin】—— 函数字面值(量)补充

kotlin(六)--匿名函数 匿名函数 匿名函数和普通函数没有什么区别,只是没有名字而已 如果是单表达式的函数体,可以用赋值运算符代替大括号,而且可以省略返回值类型,编译器可以推断是否有返回值,如果有类型是什么类型。这个其实和匿名函数没有关系,普通函数也能用 如果编译器可以推断出匿名函数的形参类型,可以将形参类型省略 匿名函数是可以作为函数参数的,在实际使用中函数的参数类型是lambda函数类型,可是穿个匿名函数是没问题的,这也能说明lambda的底层实现是匿名函数,比如filter方法 //普通函数 fun add(x 阅读详情

之前在学习 Kotlin 的时候,有整理了一篇关于 函数字面值 的博客。然后今天再回顾相关知识点的时候,感觉对这个概念加深了一点理解,而且之前那篇文章可能说得不太明白,于是这里又整理下相关的想法,做一个补充,希望能够帮助大家更加通俗的理解这个概念。

首先,函数字面值(量)即一段函数文本,说白了就是一段代码,可以当作参数来传递。


比如下面的:

var tmp: ((Int) -> Boolean)? = null

定义了一个变量 tmp,而该变量的类型就是 (Int) -> Boolean 这一函数类型(可为空的),该类型的函数,需要传递一个 Int 类型的参数,返回 Boolean 类型的值。

这就跟下面的是类似

var tmp2: String? = null

定义一个变量 tmp2,而该变量的类型就是 String 类型,即字符串类型。

当然, tmp 暂时只是定义了类型,然后如果给它赋值的话,可以是:

// 1-1
// num 即对应 Int 类型的参数,(num>10) 是一个表达式,对应着 Boolean 类型的返回值
tmp = { num -> (num > 10) }

此时,num -> (num > 10) 即是一个函数字面值,或者说,这个函数字面值即指的是 num -> (num > 10)。

(题外话,如果函数只有一个参数的话,则该参数可以省略,默认以 it 关键字代替)
在这里插入图片描述

当然,tmp 的具体实现是不定的,可以是上面写的那样,也可以是:

// 2-1
tmp = { num -> (num >= 0) }

这里就对应另外一种函数字面值了。

以上说到的两种不同的函数字面值,他们唯一的共同点就是属于 (Int) -> Boolean 类型。

接下来还有一点,既然是变量,就可以作为方法参数传递,比如我定义一个方法:

fun method(a: ((Int) -> Boolean)?) {
    val b = a?.invoke(3)
    println(b)
}

该方法的参数 a 同样也是 (Int) -> Boolean 这一函数类型,因此,在使用该 method() 方法时,就可以传递之前的两种函数字面值,即 1-1 和 1-2 两种不同的函数字面值。然后通过 invoke() 来触发其执行,当然,需要传递一个 Int 类型的参数。

// 2-1
method({ num -> (num > 10) })
// 2-2
method({ num -> (num >= 0) })

对于 1-1 对应的函数字面量,其执行结果就为 false,即会打印 fasle;
对于 1-2 对应的函数字面量,其执行结果就为 true,即会打印 true;


类比到 Java 中,其实就类似于定义一个只有一个方法的接口,前面说的 “函数类型” 即对应该接口类型,而函数字面值,则对应着接口方法的具体实现。

20、Kotlin 函数:作用域、字面量与 Lambda 表达式详解 本文深入讲解了 Kotlin 中的函数特性,包括可变参数的处理、函数作用域(局部函数、成员函数和扩展函数)、函数字面量(匿名函数与 Lambda 表达式)、高阶函数的应用等内容。同时,还详细解析了 Lambda 表达式的参数匹配规则、内联函数的使用方式,并结合示例代码展示了如何灵活运用这些特性进行高效开发。通过本文,读者可以全面掌握 Kotlin 函数的核心概念与高级用法,提升代码质量与开发效率。 阅读详情

相关推荐

LaMAR数据集下载和使用流程

LaMAR数据集

qq_51745206的博客 971

【Kotlin】—— 函数字面值(量)

在学习的 Kotlin 的时候,接触到了一个概念,即函数字面值,有的也叫函数字面量,(英文:function literal)。 先是 Google 了一番,在结合 javascript字面量、什么是Scala中的函数字面量? 两篇博客的理解: 函数字面值(量)即一段函数文本,说白了就是一段代码,可以当作参数来传递。 函数字面量是匿名的,它们在默认情况下没有名称,但是你可以通过将它们绑定到一个变量...

一个有思想的搬运工 2438

国产数据库迁移必看:达梦到ES的CDC方案优化全记录(含完整代码)

本文详细记录了从达梦数据库到Elasticsearch的CDC方案优化全过程,涵盖触发器方案局限性、Debezium架构优势及完整代码实现。通过Flink集成和性能调优,实现毫秒级延迟同步,显著降低数据库负载,为国产数据库迁移提供可落地的技术方案。

weixin_29079671的博客 497

4.3 Kotlin函数字面量和闭包

函数字面量 函数字面量有的也叫函数字面值,所谓字面量,就是不用变量直接用文本写出,比如:”hello 你好“、"12345"等都是字面量。我们可有将这些字面量赋值给常量或者变量。 val str: String = "hello 你好" val str1: String = "12345" 函数也可以有字面量,比如: { println("hello 最近好吗周杰伦") } 与所有字面量一致,它也可以赋值给一个变量: val show = { println("h

不一样的烟火 485

基于FPGA的TDC延迟链优化与码密度校准方法(1)——原理与实现

本文深入探讨了基于FPGA的时间数字转换器(TDC)延迟链非均匀性问题及其码密度校准方法。通过分析工艺偏差、温度电压影响等根源,详细介绍了码密度测试原理、逐位校准技术及气泡消除算法,并分享了自适应校准策略与多场景应用实践,有效提升TDC测量精度至皮秒级。

kiwi8的博客 488

安卓集成华为HMS Scankit实现自定义扫码功能

实现扫码功能 使用的是集成华为扫描的SDK,UI界面借鉴的是谷歌官方的Zxing项目中的自定义view,两者结合实现。 先上效果图: 先在项目根级别(build.gradle)当中配置HMS Core SDK的Maven仓地址。 // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huaw

qq_47625961的博客 5510

【Android】Kotlin 中带有接收器的函数字面量

在这篇文章中,我们将了解kotlin中带有接收器的函数字面量。因此,在开始之前,让我们先了解一些基础知识。首先,让我们检查如何编写函数。我们将看到如何使用函数和StringBuilderAPI来完成从给定字符串创建标签的任务。该功能看起来像,String)String{}现在,假设我们有两个字符串MindOrks和AfterAcademy,并且想要将字符串转换为标签,然后我们调用,在这里,我们必须调用append函数来打印输出。}而且,我们使用Kotlin中的扩展函数,例如,}...

m0_56144365的博客 351

第3章 信息技术服务(一)

对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳

好好学习,天天向上的博客 733

Kotlin进阶系列-函数类型及函数字面值

本文详细介绍了Kotlin的函数类型及函数字面值的示例及语法。

zuoluohust的博客 1188

RT-Thread GD32F4xx HWTIMER驱动

GD32F4xx RT-Thread 硬件定时器驱动调试使用记录

madao1234的博客 1481

milvus | 第 1 章:从“相似图片搜索”理解 Milvus 向量数据库

本文介绍了向量数据库Milvus的核心概念和基本架构。主要内容包括:1)向量数据库解决的是高维向量相似度检索问题,通过Embedding将非结构化数据转换为向量进行比较;2)Milvus作为分布式向量数据库,包含Proxy、Coordinator、QueryNode等多个组件协同工作;3)关键概念如Collection、Schema、Segment等构成了Milvus的数据组织方式;4)典型使用流程包括创建集合、插入数据、构建索引、加载数据和执行搜索五个步骤。文章为后续深入理解Milvus源码提供了基础知识

weixin_43674738的博客 131

Kotlin 中的函数类型、函数类型字面值、函数接口与 Lambda 表达式详解

Kotlin函数式编程解析:本文系统介绍了Kotlin中函数式编程的四个核心概念。1)函数类型:描述函数形状的语法(参数类型)->返回类型;2)函数类型字面值:用大括号包裹的直接函数实现体;3)函数接口:单抽象方法接口,可用Lambda简化实现;4)Lambda表达式:{参数->函数体}的简洁写法。文章详细阐述了四者的关系与应用场景,对比了Java与Kotlin的实现差异,展示了Kotlin函数式编程的灵活性和优雅性。(149字)

veiTian的博客 806

2025年下半年网络规划设计师综合知识真题及答案解析

1983年,ARPANet完成技术转型,对此后的 Internet发展全关重要,这一转型是指( ) A.电路交换转向分组交换 B.商业化转型 C.民用化转型 D.从 NCP 协议转向 TCP/IP 答案:D 解析:ARPANet 最初使用 NCP (Network Control Protocol)协议进行主机问通信。1983年1月1日,ARPANet 正式切换到TCP/IP 协议族,为后续Internet的发展奠定了统一协议基础。

鹿鸣天涯 920

Kotlin进阶系列-带接收者的函数类型及函数字面值

上篇文章介绍了函数类型及函数字面值,本文将在此基础上进行拓展,主要介绍带接收者类型的函数类型及函数字面值。

zuoluohust的博客 704

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

kotlin高阶造函数

kotlin 函数都是头等的,这意味着它们可以存储在变量与数据结构中、作为参数传递给其他高阶函数以及从其他高阶函数返回。可以像操作任何其他非函数值一样操作函数。 为促成这点,作为一门静态类型编程语言的 Kotlin 使用一系列函数类型来表示函数并提供一组特定的语言结构,例如 lambda 表达式。 高阶函数 高阶函数是将函数用作参数或返回值的函数。 一个不错的示例是集合的函数式风格的 fold, ...

SHELTER_7的博客 513

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Kotlin中的函数式编程注意点

(::)符号:获取函数的引用 当函数作为变量传递给函数或赋值给别的变量时(传的是函数字面值:Lambda 表达式、匿名函数,都是一种 函数字面值) 函数以lambda形式表示:直接写 val sum: (Int, Int) -&amp;gt; Int = { x, y -&amp;gt; x + y } applyOp(2, 3, sum) 函数以纯函数的形式要在函数名前加上(::)(传的是函数的引用)...

hukou6335490的博客 243

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kotlin 类型声明相关的一些注意事项

由于kotlin支持类型推导,所以很多时候变量的类型可以省略,但有时候省略变量类型又可能带来一些不便,甚至隐患。本文记录下一些“建议声明类型”、“可以省略类型”的场景。(暂时想到的不多,后续持续更新) 直接通过构造方法创建对象时,创建过程本身就显式“声明”了类型。如果这时候还加类型声明,那就不是补全,而是多余了: 变量声明后紧跟字面值 这种情况是指等号右边是一个字面值,例如整数、字符串、布尔值,因为这种情况可以直接根据值来迅速判断出类型,且这个值的类型非常独立,不依赖外部上下文以及第三方库。类型声明的

m0_64365896的博客 1049

Kotlin学习(十二): 函数、高级函数和Lambda表达式

高阶函数,又称算子(运算符)或泛函,包含多于一个箭头的函数,高阶函数是至少满足下列一个条件的函数:1.接受一个或多个函数作为输入,2.输出一个函数。 在无类型Lambda 演算,所有函数都是高阶的;在有类型Lambda 演算(大多数函数式编程语言都从中演化而来)中,高阶函数一般是那些函数型别包含多于一个箭头的函数。在函数式编程中,返回另一个函数的高阶函数被称为Curry化的函数。 在很

旺仔的专栏 720

kotlin 实战之函数与 lambda 表达式总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~ 特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。 kotlin 函数与 lambada 表达式 在 kotlin 中调用 java 方法时不能使用具名参数语法,因为 java 字节码并不总是会保留方法参数信息。 默认参数函数 //重载一个 te

工匠若水 6295

Kotlin - Lambda表达式(匿名函数)

同样支持SAM转换。底层是将Java的SAM翻译成函数类型。

HugMua的博客 3943

4-Kotlin中的字符串

Kotlin语言相对于Java语言在字符串上做了一些增强,字符串也是一种数据类型 字符串的定义 字符串表示一串连续的字符,在Kotlin中用String表示一个字符串时,需要用一对英文半角格式的双引号""引起来。一个字符串可以包含一个或者多个字符,也可以不包含任何字符,即长度为0 var str: String = "Hello World!" //第1 种定义方式 var str = "Hello World!" //第2 种定义方式 字符串是不可变的,字符串中的元素可

xx753940262的博客 2044

Step into Kotlin - 20 - 高阶函数

函数字面值,函数参数,闭包与柯理化,方法扩展表达式,inline

NightWish 1394

网友提议 Kotlin 增加这些新特性。。

前言 Kotlin 是一门开放的语言,不仅仅是源码的开放,任意使用者都可以直接参与它的建设。大家可以通过 YouTrack 向社区提出自己的 idea 和 issue ,其中一些呼声高的 issue 会进入 KEEP 交由 Kotlin 团队管理维护,并有可能被最终实现、出现在未来的某个版本中。 YouTrack Hot Issue 透过 YouTrack 中当下的热门 issue ,我们可以预见 Kotlin 未来有可能引入下面这些新特性: 命名空间 多接受者扩展函数 集合字面值 双类型属性 名

移动端开发干货分享 416

Kotlin编程之高阶函数,Lambda表达式,匿名函数

Kotlin编程之高阶函数,Lambda表达式,匿名函数

HeXinGen的博客 5848

kotlin之带接收者的函数字面量

在kotlin中,带接受者的函数字面量这个使用的地方还是很多的,需要仔细理解总结一下 在java中,函数(在java了,把函数称方法)是定义在类里面的,在调用函数的时候,都是先new一个类对象,然后,通过.调用函数。其实调用方法的过程,是把类对象传给了方法,这个也是java常说的一个概念,就是方法有个默认参数是类对象。 在Kotlin中,由于函数是first class(一等公民),类的地位被...

“点点”专栏 1727

【深入kotlin】 - 匿名函数、闭包和接收者

匿名函数 匿名函数没有名字,它很大程度上和 lambda 表达式类似,它的函数体既可以是语句块,又可以是表达式。同时,匿名函数的参数类型可以推断而不用指定,这点跟普通的函数不同。此外,匿名函数只能定义在函数体内。 fun main(args:Array<String>){ fun(x:Int y:Int) = x+y // 1 val arr = arrayOf("hello","world","!") arr.filter(fun(item): Boolean = item.lengt

kmyhy的专栏 2281
上一篇: 关于 DialogFragment 设置成充满屏幕的处理
下一篇: 关于 BehaviorSubject onError() 导致的 Undeliverable exception received
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值