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

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

文章目录 一、匿名函数 二、匿名函数函数类型 三、匿名函数隐式返回 一、匿名函数 ---- 声明函数时 , 没有 函数函数 是 匿名函数 ; 匿名函数 可以作为 函数参数 , 也可以作为 函数返回值...; 匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库中函数 ; Kotlin 中对 CharSequence 类进行了扩展 , 定义了 count(predicate: (Char) ->...Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型函数 , 用于 返回匹配给定 匿名函数 字符数 ; /** * 返回匹配给定[谓词 predicate 匿名函数...---- 匿名函数 可以作为 变量 赋值给 函数类型变量 , 可以作为 函数参数 传递给函数 , 因此 , 匿名函数 与 变量 一样 , 也存在 对应 函数类型 ; 函数类型 由 参数 和 返回值...决定 ; 有 相同 参数顺序 , 参数个数 和 返回值类型 函数 , 其 函数类型相同 ; 如上个章节 , 扩展函数 CharSequence.count 接收匿名函数参数 predicate ,

3K20

Kotlin函数类型 ( 函数类型 | 带参数名称参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

函数类型 II . 带参数名参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 函数类型 VII . 函数类型实例化 VIII ....函数类型自动推断 IX . 带接收者函数类型 与 不带接收者函数类型 之间转换 X . 函数类型变量调用 I ....函数类型自动推断 ---- 1 . 变量类型推断 : Kotlin变量类型可以不用显示声明 , 可以根据其赋值类型进行智能类型推断 ; 2 ....函数变量类型推断 : 函数类型变量也具有智能类型推断性质 ; var add = {a : Int, b : Int -> a + b} 上面的代码中省略了函数类型变量函数类型 , 其赋值 Lambda...带接收者函数类型 与 不带接收者函数类型 之间转换 ---- 带接收者函数类型 , 可以转换为 不带接收者函数类型 , 转换规则是 , 带接收者函数类型接收者 , 可以转换为不带接收者类型第一个参数

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

Kotlin 简单优雅高阶函数Kotlin 简单优雅高阶函数Kotlin极简教程》正式上架:1 . Kotlin 函数式编程: 函数组合。一切皆是函数。2. 简单好用 Kotlin 类型别名

Kotlin 简单优雅高阶函数 非常感谢您亲爱读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 函数代表一种关系 f 蕴涵逻辑流。...整个图G就是一幅美妙抽象逻辑之塔 映射图 。 ? image.png 1 . Kotlin 函数式编程: 函数组合。一切皆是函数。...Kotlin 类型别名 typealias G=(String) -> Int typealias F=(Int) -> Boolean typealias H=(String) -> Boolean...简单好用 Kotlin 类型别名 typealias G=(String) -> Int typealias F=(Int) -> Boolean typealias H=(String) -> Boolean...简单优雅高阶函数定义(复合函数): compose(f, g) = f(g(*)) 组合函数返回传递给它两个函数组合: (f、g) = f (g (*))。

94730

Kotlin 内联函数和 Reified 类型参数原理与运用

概要 本文将深入探讨 Kotlin 中内联函数和 Reified 类型参数工作原理,并提供详细示例以帮助读者更好地理解这两个高级功能。...Reified 类型参数原理 在普通泛型函数中,类型参数信息在编译后会被擦除,这意味着在运行时无法获取泛型类型实际信息。...使用 Reified 类型参数 reified 关键字允许我们在函数内部获取类型参数实际类型信息,而不仅仅是编译时类型。这使得在运行时执行类型检查和反射操作成为可能。...这种方法允许您以类型安全方式查询不同类型对象。 这些示例突出了内联函数和reified类型参数实际应用。它们使代码更加类型安全、灵活,并支持诸如反射、DSL 创建和数据库访问等高级用例。...结论 内联函数和 reified 类型参数是 Kotlin高级功能,对于性能优化和类型安全反射非常有用。深入理解它们工作原理有助于开发者更好地运用它们来解决实际问题。

26020

使用Kotlin做一个简单HTML构造器

所以我们先来学习一下Kotlinlambda表达式。如果学习过函数式编程的话,对lambda表达式应该很熟悉了。...fun doSomething(name: String, func: (e: String) -> Unit) { func(name) } Kotlinlambda表达式还有一项特性,指定接收器...语法就是在lambda表达式括号前添加接收器和点号.。在指定了接收器lambda表达式内部,我们可以直接调用接收器对象上任意方法,不需要额外前缀。...这里属性和子标签都声明为了MutableList类型,它是Kotlin类库中可变列表,存储内容是可以修改。最后文本类非常简单,直接返回文本。...table方法上lambda表达式使用Table类作为接收器init: Table.() -> Unit。这里接收器类型实际上就是init参数lambda表达式上下文。

61420

Kotlin概述与Java比较

意味着Kotlin提供了扩展具有新功能能力,而无需继承类。这是通过扩展功能完成。要声明一个扩展功能,我们需要用一个接收器类型,即被扩展类型来加上它名字。...Lambda表达式或匿名函数是“函数文字”,即未声明函数,而是作为表达式立即传递。...很酷啊 匿名函数是一个允许我们指定返回类型函数,在这个函数中,函数名被省略。...Kotlin 语言未来 Kotlin与Java互操作,并将代码和优秀类型系统增量更改更改为Java,并提供了具有向后兼容性Java简单迁移路径。...具有更多声明,更少代码,混合语言数据库,比Java更具表现力,使Kotlin成为企业应用和移动未来发展方向。

2.9K10

Kotlin 1.2 新增特性

JVM 带默认函数参数内联函数 内联函数现在允许其内联函数参数具有默认值: defaultStrings = [1, 2, 3] customStrings = [(1), (2), (3)] 目标平台...::foo,写入一个绑定可调用引用,而不用明确接收器。...弃用:数据类覆写性拷贝 当从已经具有相同签名拷贝函数类型派生数据类时,为数据类生成 copy 实现使用父类型默认函数,会导致出现与预期相反行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突继承已经被...请使用具有相应数组工厂函数展开运算符: 在这种情况下,有一种优化可以消除冗余数组创建,从而防止性能下降。...破坏性变更:通过内联扩展接收器修复平台 null 转义 在平台类型空值上调用内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码中。

2.8K70

Kotlin 1.2 新增了哪些特性?

JVM 带默认函数参数内联函数 内联函数现在允许其内联函数参数具有默认值: ?...6 目标平台:运行 Kotlin 1.2.0 版本 JVM 支持 ::foo 作为 this::foo 缩写 现在可以使用 ::foo 替代 this::foo,写入一个绑定可调用引用,而不用明确接收器...弃用:数据类覆写性拷贝 当从已经具有相同签名拷贝函数类型派生数据类时,为数据类生成 copy 实现使用父类型默认函数,会导致出现与预期相反行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突继承已经被...请使用具有相应数组工厂函数展开运算符: ? 在这种情况下,有一种优化可以消除冗余数组创建,从而防止性能下降。...破坏性变更:通过内联扩展接收器修复平台 null 转义 在平台类型空值上调用内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码中。

2.8K10

31 天,从浅到深轻松学习 Kotlin

Day 4:When 表达式 强大 switch!Kotlin When 表达几乎可以匹配任何东西。字面值,枚举,数字范围。您甚至可以调用任意函数!...Day 6:属性 在 Kotlin 中,类可以具有可变和只读属性,默认情况下生成 getter 和 setter。如果需要,您也可以实现自定义。...Day 10:Data 类和 equality 可以创建具有一个具有处理数据类吗?将它们标记为 "Data" 类。...扩展功能一些特性: 不是成员函数 不要以任何方式修改原始类 通过静态类型信息解决编译时间 会被编译为静态函数 不要多态性 例如:String.toUri() Day 27...简短而强大,run,let,with 和 appy 都有一个接收器 (this),可能有一个参数 (it) 并可能有一个返回值。

2.2K30

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

Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程挂起和恢复 ① ( 协程挂起和恢复概念..., 该函数 () -> Unit 是 SequenceScope 类型扩展函数 ; 任意传入一个匿名函数 , 该函数被自动设置为 SequenceScope 类扩展函数 , 在其中任何调用都默认调用是..., 该函数就会变成 SequenceScope 扩展函数 , SequenceScope 类中扩展函数是限制挂起 , 只要是 SequenceScope 中 , 如果要调用挂起函数 , 只能调用其已有的挂起函数..., 如 : yield , yieldAll , 函数等 , 不能调用其它挂起函数 ; RestrictsSuspension 注解作用是 限制挂起 ; /** * 当用作扩展挂起函数接收器时,...* 这些挂起扩展只能调用该特定接收器其他成员或扩展挂起函数,并且不能调用任意挂起函数

8.2K30

Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数简略写法 )

文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数..., 扩展属性 , 都是为 非空类型 定义 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 情况 ; 注意下面的调用细节 : 如果定义...扩展函数 是 为 非空类型定义 , 可空类型变量 想要调用该 扩展函数 , 在调用时使用 " ?....非空类型扩展函数 如果定义 扩展函数 是为 可空类型定义 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...被 infix 修饰 泛型扩展函数 , 最终产生是 Pair 实例对象 ; /** * 从this和[that]创建类型为[Pair]元组。

1.9K30

kotlin和java语言_我希望Java可以从Kotlin语言中窃取10个功能

奇怪是,在Java中,每个类始终具有标识这个概念,而在现实世界中所有Java类80%到90%都不需要这个概念。 同样, Java类始终具有可在其上进行同步监视器 。    ...请注意,在Kotlin中val是如何可能: 局部变量类型推断。 现在正在为将来Java版本进行讨论 。    ...当然,具有局部变量类型推断将是一个加号,但请检查一下    val map: Map = ...  ...实际上,这里Kotlin语法只是为了让函数假装为接收器类型一部分:    fun MutableList.swap(index1: Int, index2: Int) {   val tmp...从本质上说,一个函数与其参数类型是互变,而其结果类型是协变,那么对Function或Stream更好定义是:    interface Function {} interface

1.1K00

Kotlin 成员扩展函数和 implicit receiver

名字 implicit receiver,直接翻译到中文的话,叫隐式接收器或者说接收者。啥叫「接收」啊?所谓接收,其实指就是接收调用,或者说接受调用。接受函数调用啊,接受属性访问啊。...Kotlin 提供解法是,你专门创建一个函数,并给它设置一个函数类型参数: 函数不用做什么特别的事,关键是执行一下它那个函数类型参数: 另外,你要给这个函数类型参数,设置一个 receiver...类型: 这么一指定,就把参数函数体内部——注意,是这个 block 函数体,不是外部函数本身函数体——在它内部强行安插了一个隐式 receiver。...换句话说,我在调用这个外部函数时候,它函数类型参数大括号里就有一个 IntMultiplier 类型 this 了: 那么,我在里面就可以这么写了: 哎,就这么通过给参数设置 receiver...通过这种写法,我们就可以任意地往代码里插入我们指定 implicit receiver,或者说指定 this,去应对「多个 this」需求场景了。

11910

Kotlin 1.2 新特性

自1.2版本开始,Kotlin允许允许给内联函数函数参数填写默认参数了。...大家都知道,Kotlin类型推断系统是非常强大,现在Kotlin编译器也支持通过强制转换信息,来推断出变量类型了。...弃用:vararg单个命名参数 为了与注释中数组文字保持一致,在命名形式(foo(items = i))中传递可变参数单个项目已被弃用。请使用具有相应数组工厂功能扩展运算符。...弃用:扩展Throwable泛型内部类 继承泛型类型内部类Throwable可能会违反类型安全性,因此已被弃用,Kotlin 1.2中有警告,Kotlin 1.3中有错误。...内联扩展空修复 在以前版本中,在平台类型空值上调用内联扩展函数没有检查接收器是否为null,并因此允许null转义到其他代码中。

1.7K100

Kotlin | 作用域函数

什么是作用域函数(Scope Functions)? Kotlin 标准库包含了几个特殊函数,其目的是在调用对象上下文环境(context)中执行代码块。...在 Kotlin 中,作用域函数总共有五个,分别是:let、run、with、apply、also。接下来我们逐个详细分析。...getRandomInt() generated value $it") } } fun main() { val i = getRandomInt() } 你也可以为 context 对象指定任意参数名...(this),返回调用者本身 使用apply不会返回值代码块,主要对接收器对象成员进行操作。...我觉得这就是 Kotlin 一种优点和缺点体现,优点是它很灵活,灵活不像 Native 语言,缺点是它太灵活了,太多语法糖导致你容易忘记写这些代码要实现目的,所以,虽然作用域函数是使代码更简洁一种方法

91030

Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin

前言   之前写了一个蓝牙小Demo,看的人还是有一些,也有人私信我说,在学Kotlin,能不能出一版Kotlin博客讲述这个蓝牙开发,这个想法还是不错,不过就怕写了没有人看,因为在国内Kotlin...[在这里插入图片描述] 选择语言为Kotlin,然后点击**Finish**完成项目的创建。第一次创建Kotlin项目花费时间会比较长,耐心等待。 创建好了之后你看到第一个页面应该是这样。...通知栏样式修改 首先修改状态栏文字颜色,如果你现在运行这个项目在手机上时,你会发现状态栏是白色背景以及白色文字。...val 表示不可变量,而通过Kotlin类型推导机制,tvName此时代表就是一个通过R.id.tv_name实例化之后TextView。...语法很简单,它允许你返回值一致判断进行直接赋值,比如这里判断设备名称为空则显示无名二字,不为空则显示设备名,这两个返回都是String类型,而tvName.text设置就是String类型,所以就有了上面的简洁代码

3.9K10

Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin

Kotlin版 蓝牙开发 (扫描设备、绑定、解绑) 前言   之前写了一个蓝牙小Demo,看的人还是有一些,也有人私信我说,在学Kotlin,能不能出一版Kotlin博客讲述这个蓝牙开发,这个想法还是不错...,不过就怕写了没有人看,因为在国内Kotlin是受众群体确实比较少,当然了也是有大方向在往这边推动,但是小公司依然不会去用Kotlin,如果你看不惯我这个说法也不要告诉我。...通知栏样式修改 首先修改状态栏文字颜色,如果你现在运行这个项目在手机上时,你会发现状态栏是白色背景以及白色文字。如下图所示: ?...val 表示不可变量,而通过Kotlin类型推导机制,tvName此时代表就是一个通过R.id.tv_name实例化之后TextView。...语法很简单,它允许你返回值一致判断进行直接赋值,比如这里判断设备名称为空则显示无名二字,不为空则显示设备名,这两个返回都是String类型,而tvName.text设置就是String类型,所以就有了上面的简洁代码

4.3K20

Kotlin】:: 双冒号操作符详解 ( 获取类引用 | 获取对象类型引用 | 获取函数引用 | 获取属性引用 | Java 中 Class 与 Kotlin KClass )

文章目录 一、:: 双冒号操作符 1、获取类引用 引用类型 KClass 说明 2、获取对象类型引用 3、获取函数引用 4、获取属性引用 二、 java.lang.Class 与 kotlin.reflect.KClass...一、:: 双冒号操作符 ---- 在 Kotlin 中 , :: 双冒号操作符 作用是 获取 类 , 对象 , 函数 , 属性 类型对象 引用 ; 获取这些引用 , 并不常用 , 都是在 Kotlin...反射操作时才会用到 ; 相当于 Java 中 反射 类 字节码类型 Class 类型 , 对象类型 Class 类型 , 对象函数 Method 类型 , 对象属性字段 Field 类型 ;...1、获取类引用 在 Kotlin 中 , 使用 :: 双冒号操作符 获取 类类型对象引用 代码格式为 : Java或Kotlin类名::class 获取 Kotlin 类型对象 类型...调用 类名::函数名 获取 函数类型 引用 , 其类型函数类型 , 如下代码中 , 调用 Student::info 获取函数类型变量 类型为 (Student) -> Unit , 该函数引用

4.3K10
领券