首页
学习
活动
专区
圈层
工具
发布

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

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

4.3K20

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

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

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

    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 (*))。

    1.2K30

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

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

    80820

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

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

    87420

    Kotlin概述与Java的比较

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

    3.5K10

    Kotlin 1.2 的新增特性

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

    3.5K70

    Kotlin 1.2 的新增了哪些特性?

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

    3.5K10

    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.8K30

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

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

    2.8K30

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

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

    12.7K30

    Kotlin 的成员扩展函数和 implicit receiver

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

    37710

    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 语言,缺点是它太灵活了,太多的语法糖导致你容易忘记写这些代码要实现的目的,所以,虽然作用域函数是使代码更简洁的一种方法

    1.2K30

    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.6K00

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

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

    6.3K10

    Kotlin 1.2 新特性

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

    2.1K100

    【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 , 该函数引用

    6.6K11
    领券