专栏首页编程Kotlin学习之高阶函数和Lambda表达式的基础用法

Kotlin学习之高阶函数和Lambda表达式的基础用法

Kotlin学习之高阶函数和Lambda表达式的基础用法

一、定义和调用高阶函数的写法

kotlin.collections._Arrays.kt中的mapTo()函数的源码如下:

mapTo()是Array类型的扩展函数,它可以接受两个参数,第一个参数是表示C类型的MutableCollection,第二个参数是一个(T)->R类型的参数。mapTo()函数会遍历数组中的每个元素,对这个元素调用传入的函数transformation,再将transformation的返回值添加到可变集合destination中,最后返回destination。

在定义高阶函数时,对于作为参数传入和作为返回值输出的函数,都必须用(参数列表类型)->返回值类型的形式标示清楚,在高阶函数内可以调用作为参数传入的函数。

要调用高阶函数,可以先定义一个函数,再将函数作为参数传入高阶函数内

定义一个名为square的函数,它接受一个Int类型的参数,返回它的平方根,然后我们用函数引用的形式把它传入mapTo()函数内。这种方法适用于要执行的操作已有函数定义时。

函数引用是什么?

它的写法是在函数名前加上::用来表示函数对象,而不是调用这个函数。

调用高阶函数的另一个方法是使用匿名函数或Lambda表达式传入所需的参数

上面调用mapTo()时,如果没有外部定义square函数,就需要使用匿名函数或Lambda表达式传入我们要执行的操作,如下:

或者用Lambda表达式代替匿名函数:

同时,高阶函数还规定,如果高阶函数的最后一个参数是Lambda表达式,可以把Lambda表达式写在括号外面

二、Lambda表达式的写法

Lambda表达式的完整写法应该是这样的:

例如之前的sum函数:

但是一般情况下,编译器可以推断出参数的类型,一般可以省略参数类型,上面的mapTo()就可以写成:

因为array是Array类型,所以a被自动推导为Int类型,a*a也是Int类型,整个Lambda表达式就是(Int)->Int类型了。

Lambda还规定,如果Lambda只有一个参数,而且能够推断出它的类型,就可以省略参数说明,只写函数体,在函数题中用it调用这个参数:

但是,在使用Lambda表达式时,必须明白it是什么,不能想当然,否则就会出现错误

forEach()函数接受一个(T)->Unit类型的函数,对map中的每一个元素执行传入函数的操作。it是Map.Entry类型,打印结果如下:

为什么回事这样的呢?

因为forEach()函数里用的形式遍历Map,实际上调用了Map的迭代器,而Map的迭代器迭代的是Map.Entry对象,所以这里的it就是Map.Entry类型,打印时调用的是Map.Entry对象的toString()方法。

如果只打印map的值,该怎么办?

学海无涯苦作舟

本文来自企鹅号 - Android成长录媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 五撩Python

    重复,再重复,你就是专家。 --曾子 1、起手 来说函数。 2、函数 函数就是整理好的一堆可重用的代码,有输入,然后就有输出。 比如我们计算折扣,输入是消费者的...

    企鹅号小编
  • 浅谈如何定义和调用Python的函数

    函数是python编程核心内容之一,笔者在本文中主要介绍下函数的概念和基础函数相关知识点。函数是什么?有什么作用、定义函数的方法及如何调用函数。 函数是可以实现...

    企鹅号小编
  • C+实现神经网络之贰—前向传播和反向传播

    前言 前一篇文章C++实现神经网络之壹—Net类的设计和神经网络的初始化中,大部分还是比较简单的。因为最重要事情就是生成各种矩阵并初始化。神经网络中的重点和核心...

    企鹅号小编
  • Kotlin中let()with()run()apply()also()函数的使用方法与区别

    相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard...

    砸漏
  • Python之函数编程(2)

    在上面的命令中,我们定义一个return_sum()的函数,这个函数返回一个sum的函数,sum函数的作用是求一个可迭代对象的所有元素的和,当我们直接调...

    AsiaYe
  • 7.3 函数总结

    (2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件夹中来。

    C语言入门到精通
  • 聊一聊编程中的函数

    给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表...

    算法与编程之美
  • 什么是python的函数体

    函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

    砸漏
  • (1)James Stewart Calculus 5th Edition:Functions and Models

    dodo_lihao
  • 7.1 函数

    1、函数是从英文function翻译过来的,其实function在英文中的意思既是函数,也是功能。、

    C语言入门到精通

扫码关注云+社区

领取腾讯云代金券