我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kotlin匿名函数使用介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kotlin匿名函数使用介绍

1.函数的声明

kotlin中函数的声明和java中有所不同。

1)得有fun关键字修饰,

2)参数的声明方式和变量声明类似 age:Int,先写参数名,后面跟着参数类型

3)  返回值类型写在参数的后面。

//可见性修饰符  函数关键字 方法法名     参数名 参数类型          返回值
private       fun      functionName(age: Int, name: String): String {
    return name + age;
}

2.函数参数

默认值参:如果不打算传入值参,可以预先给参数设定默认值

fun main() {
    //通常调用方式
    fix("xiaohua", 20)
    //age已经给定默认值,此时可以不传参数
    fix("xiaohua")
}
//参数age 给定默认值
fun fix(name: String, age: Int = 18) {
    println(name + age)
}

3.Unit函数

Kotlin中没有返回值的函数叫Unit函数,也就是说他们的返回值是Unit

可以打印一下上面定义的fix函数。打印的值是kotlin.Unit。

  println( fix("xiaohua"))

4.匿名函数

定义时不取名字的函数,被称为匿名函数。

1)具名函数的声明:会显示的使用fun关键字修饰。

//具名函数
fun sayHello(): String {
    return "Hello world!"
}
fun main() {
    //具名函数调用
    println(sayHello())
}

匿名函数:

1)匿名函数虽然没有名字,但是可以赋值给变量,这个变量的类型就是函数类型。就像其他变量赋值那样。

2)和具名函数不一样,匿名函数通常不需要return关键字返回数据。匿名函数会隐式的或自动返回最后一行代码的执行结果。

普通变量赋值:

 val hello: String = "hello"

匿名函数赋值变量:

fun main() {
    //声明一个匿名函数,并赋值给变量sayHello
    val sayHello: () -> String = {
        "Hello world!"
    }
    //匿名函数调用
    println(sayHello())
}

3)匿名函数类型。

普通变量的类型在赋值时就指定了,或者通过类型推断,由编译器在编译器指定变量类型。

那么匿名函数的类型是啥,由啥决定?

匿名函数的类型是由参数和返回值决定的。

fun main() {
    //声明一个匿名函数,并赋值给变量sayHello
    val sayHello: () -> String = {
        "Hello world!"
    }
    //打印函数变量
    println(sayHello)
}

得到的结果是Function0<java.lang.String>

Function0:Function后的数字表示的是参数的个数,0表示无参,1表示一个参数,以此类推。

<java.lang.String> 表示的是匿名函数返回值类型。

5.匿名函数的参数

匿名函数可以不带参数,也可以带一个参数或多个参数。

需要带参数时,参数类型放在匿名函数的类型定义中“()”,参数名放在函数定义中“{}”。

1)一个参数的定义:

fun main() {
    val sayHello: (name: String) -> String = { name ->
        "Hello $name!"
    }
    println(sayHello("HanMei"))
}

当匿名函数的参数只有一个时,可以使用it关键字来表示参数名。当有多个参数时就不能使用了。

fun main() {
    val sayHello: (name: String) -> String = {
        "Hello $it!"
    }
    println(sayHello("HanMei"))
}

2)定义多个参数的匿名函数

fun main() {
    val sayHello: (String, Int) -> String = { name, age ->
        "Hello $name$age"
    }
    println(sayHello("HanMei",18))
}

3)类型推断。

我们知道定义普通变量时,在编码阶段可以不用给变量指定类型。

当我们把匿名函数赋值给变量时,也可以不用指定函数的返回值类型,有编译器进行类型推断。

这时定义匿名函数时的“: () -> String”都可以省略。

无参数时的类型推断:

fun main() {
    val sayHello = {
        "Hello world!"
    }
    println(sayHello())
}

一个参数的类型推断:

参数定义和返回值定义可以省略。但是必须在函数定义中,指定参数类型和参数名。

fun main() {
    val sayHello={ name:String ->
        "Hello $name!"
    }
    println(sayHello("HanMei"))
}

多个参数的类型推断:

fun main() {
    val sayHello = { name: String, age: Int ->
        "Hello $name$age!"
    }
    println(sayHello("HanMei", 18))
}

6.lambda表达式

我们将匿名函数称为lambda函数。将他的定义称为lambda表达式,他的返回结果称为lambda结果

7.定义参数

定义参数是匿名函数的函数:函数的参数是另外一个匿名函数。

1)先定义一个具名函数,接收一个匿名函数为参数。

//定义一个具名函数,接收一个String参数和一个函数参数happyNewYear
//happyNewYear: (name: String, year: Int) -> String 这个就是匿名函数的定义
fun sayhello(name: String, happyNewYear: (name: String, year: Int) -> String) {
    val year = 2022
    //在具名函数中调用传递进来的匿名函数
    println(happyNewYear(name,year))
}

2)定义一个匿名函数,调用具名函数时,当作参数传递过去。

fun main() {
    //定义一个匿名函数
    val happyNewYear = { name: String, year: Int ->
        "${name},happy ${year}!"
    }
    //调用具名函数,并把匿名函数当作参数传递
    sayhello("HanMei", happyNewYear)
}

3)上面的匿名函数可以不单独定义,也可以在调用时定义实现。

这种写法和java中的匿名内部类是不是很像。方法的参数new一个接口,实现接口中的方法。

fun main() {
    sayhello("HanMei", happyNewYear = { name: String, year: Int ->
        "${name},happy ${year}!"
    })
}

4)如果lambda是一个函数的最后一个参数,或者是唯一的参数。那么,括住lambda值参的一对圆括号可以去掉。

fun main() {
    sayhello("HanMei") { name: String, year: Int ->
        "${name},happy ${year}!"
    }
}

8.匿名函数

匿名函数还可以用于扩展Kotlin的内置函数。

count是Kotlin用于计算字符串长度的内置函数。

  val word = "HappyNewYear"
  var count = word.count()

用匿名函数进行扩展

    count =  word.count({ letter ->
        letter == 'a'
    })

我们知道:当函数的最后一个参数或只有一个参数是lambda时,那对圆括号可以省略

count =  word.count { letter -> letter == 'a' }

我们又知道,当参数只有一个时,可以用it代替

count = word.count { it == 'a' }

9.函数的引用

要把函数作为参数传递给其他函数,除了lambda表达式,kotlin还提供了其他方法--函数引用

函数引用可以把一个具名函数转换成一个值参,传递给其他函数。

使用lambda表达式的地方,都可以使用函数引用。

1)首先定义两个具名函数:

happyNewYear就是一个普通函数。

sayhello可以接收一个函数参数。这个函数参数可以接收一个匿名函数,也可以接收一个函数引用。

fun happyNewYear(name: String, year: Int): String {
    return "$name happy $year"
}
fun sayhello(name: String, happyNewYear: (name: String, year: Int) -> String) {
    val year = 2022
    println(happyNewYear(name, year))
}

2) 函数引用的使用:双冒号+函数名,就是这个函数的引用,可以当做值参传递

fun main() {
    //::happyNewYear这个就是函数的引用,
    sayhello("HanMei",::happyNewYear)
}

10.函数类型作为返回类型

一个函数的返回值,可以是另外一个函数,函数类型也是有效的返回值类型。

sayhello是一个无参的方法,返回值类型是(String) -> String,这个表达的意思就是一个参数为String类型,返回值为String类型的匿名函数。

fun sayhello(): (String) -> String {
    return {
        val year = 2022
        "$it happy $year"
    }
}

调用方法:

fun main() {
    //调用sayhello得到这个匿名函数,并赋值给变量happyNewYear
    val happyNewYear = sayhello();
    //happyNewYear就是一个匿名函数,可以直接传参调用
    println(happyNewYear("HanMei"))
}

注意上面的返回匿名函数有这样一句代码,val year = 2022;这个是定义在匿名函数中的。

也可以定义在外边的具名函数中,匿名函数仍然可以访问的到。

fun sayhello(): (String) -> String {
    val year = 2022
    return {
        "$it happy $year"
    }
}

这就是另外一个概念。闭包

在Kotlin中,匿名函数,能修改并引用定义在自己作用域之外的变量,匿名函数引用着定义自身的函数里的变量。也就是说sayhello返回的匿名函数,可以引用定义它的函数sayhello的变量。

Kotlin的lambda就是闭包。

到此这篇关于Kotlin匿名函数使用介绍的文章就介绍到这了,更多相关Kotlin匿名函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kotlin匿名函数使用介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python匿名函数的介绍及用法

这篇文章主要介绍“Python匿名函数的介绍及用法”,在日常操作中,相信很多人在Python匿名函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python匿名函数的介绍及用法”的疑惑有所帮助!
2023-06-15

Kotlin作用域函数使用示例详细介绍

作用域函数:是Kotlin标准库中的内联函数,作用在对象上时,执行给定的block代码块。可以在block代码块中通过it,this代表当前对象,进行代码逻辑处理
2023-02-17

【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

文章目录 一、函数头声明二、函数参数1、默认参数值2、具名参数 三、Unit 函数四、TODO 函数抛出异常返回 Nothing 类型五、反引号函数名六、匿名函数七、匿名函数的函数类型八、匿名函数的隐式返回九、匿名函数参数十、
2023-08-19

C#匿名函数和匿名方法的使用

本文主要介绍了C#匿名函数和匿名方法的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

文章目录 一、DSL 领域特定语言二、apply 标准库函数分析1、apply 函数展示2、apply 函数原型分析函数原型参数和返回值分析 3、匿名函数类型分析4、扩展函数回顾5、泛型扩展函数函数类型6、泛型扩展匿名函数7、
2023-08-30

C#匿名函数和匿名方法如何使用

这篇文章主要讲解了“C#匿名函数和匿名方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#匿名函数和匿名方法如何使用”吧!在 C# 中,可以将匿名函数简单的理解为没有名称只有函数主
2023-07-05

Golang如何使用匿名函数

这篇文章将为大家详细讲解有关Golang如何使用匿名函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。匿名函数的两种使用方式一、在定义匿名函数的时候就可以直接使用(这种方式只使用一次)package ma
2023-06-08

如何使用 PHP 匿名函数?

匿名函数,也被称为闭包函数,是 php 5.3 中引入的函数类型,它允许定义没有名称的函数。其优点包括代码简洁、动态创建和局部作用域。使用匿名函数的常见示例包括:与数组函数(如 array_filter())一起使用,实现更复杂的过滤逻辑,
如何使用 PHP 匿名函数?
2024-04-17

python如何使用匿名函数lambda

这篇文章主要介绍python如何使用匿名函数lambda,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!匿名函数 lambda所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。lambda 只是一个表达式
2023-06-03

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录