Kotlin高阶函数与函数式编程详解
函数可变参数:
在上一次https://www.cnblogs.com/webor2006/p/11518425.html中学到了可变参考,关于可变参数有如下规则说明:
“一个方法中,只允许一个参数为vararg,通常作为最后一个参数,如果vararg不是最后一个参数,那么其后的参数就需要通过具名参数形式进行传递;如果其后的参数是函数类型,那么还可以通过在圆括号外传递lambda表达式来实现。”
下面来看下代码:
下面再来看另一种方式:
中缀符号(infix notation):
函数还可以通过中缀符号形式来调用,需要满足如下3个条件:
1、是成员函数或扩展函数。
2、拥有单个参数。
3、声明时使用infix关键字。
下面用代码来进行说明:
接下来改用中缀调用法,如下:
日常开发中用得不多,但是得了解。
内联函数(inline fuction):
在C++中也有内联,下面看一下在Kotlin内联函数的用法:
调用跟用普通方法木有任何区别:
那。。内联和非内联函数有啥区别呢?下面来查看一下字节码文件来揭晓其答案,先将inline关键字去掉,反编译看一下它在字节码的表现:
下面来仔细读一下main()方法的助记符:
好,接下来将其改为内联函数,再次反编译看结果:
确实这俩本质区别还是比较大的。
高阶函数(high-order fuction)与Lambda:
啥是高阶函数其实在Java8中已经学习过了,简单说就是一个函数接收了另外一个函数作为参数或者是返回一个函数作为返回值,下面先对Lambda表达式格式要求进行总结一下:
1、一个Lambda表达式总是被一对花括号所包围。
2、其参数(如果有的话)位于 -> 之前(参数类型可以省略掉的)。
3、执行体位于 -> 之后。
在Kotlin中,如果一个函数的最后一个参数是个函数,那么可以将lambda表达式作为实参传递进去,并且可以在调用时方法圆括号外去使用。
下面定义几个Lambda表达式:
其实类型声明是可以省略掉的,如下:
接下来再来看一个:
呃,这个Lambda表达式有点奇怪,其实它的类型是这样的:
接下来再来定义一个特殊的:
还可以这样进行简化:
最后再来看一个,如果是整个函数都可能为空,而非只是返回值,就可以这样来定义:
Kotlin高阶函数与函数式编程详解的更多相关文章
- Kotlin高阶函数实战
前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...
- Java8 函数式编程详解
Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...
- kotlin高阶函数实战&DSL入门
传统函数演示: 这里以电视节目“非诚勿扰”为例,男人去从一大堆美女当中挑选出自己中意的对象,比如台上有24位妹子,其档案如下: 接下来第一个男嘉宾出场啦,如下: 下面用代码来实现一下,比较简单: 先定 ...
- C#中面向对象编程中的函数式编程详解
介绍 使用函数式编程来丰富面向对象编程的想法是陈旧的.将函数编程功能添加到面向对象的语言中会带来面向对象编程设计的好处. 一些旧的和不太老的语言,具有函数式编程和面向对象的编程: 例如,Smallta ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...
- Python---12函数式编程------12.1高阶函数
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- python3 第二十章 - 函数式编程之Higher-order function(高阶函数)
什么是高阶函数?把函数作为参数传入或把函数做为结果值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式.函数式编程的特点: 函数本身可以赋值给变量,赋值后变量为函数: 允许将函数本身 ...
随机推荐
- linux驱动开发学习一:创建一个字符设备
首先是内核初始化函数.代码如下.主要是三个步骤.1 生成设备号. 2 注册设备号.3 创建设备. #include <linux/module.h> #include <linux/ ...
- istio1.0 实现蓝绿发布(未完成)
istio1.0 实现蓝绿发布 环境: 192.168.0.91 master 192.168.0.92 node 第一步:安装k8s集群,参照:https://www.cnblogs.com/eff ...
- adb 命令简介
adb命令配置 1 在命令行下,进入用户目录 cd $HOME 2 .bash_profile文件 输入下行命令获取当前文件列表: ls -al 查看文件列表,如果没有.bash_profile文件, ...
- 恋恋山城 Jean de Florette (1986) 男人的野心 / 弗洛莱特的若望 / 让·德·弗罗莱特 / 水源 下一部 甘泉,玛侬
<让·德·弗洛莱特>电影剧本 文/[法]马赛尔·巴涅尔译/苏原 编者按:<让·德·弗洛莱特>和<甘泉,玛侬>是根据法国著名作家马赛尔·巴涅尔的同名小说改编的电影.马 ...
- Python的编码规范
7. 什么是 PEP8? 8号Python增强提案,是针对Python代码格式而编写的风格指南 8. 了解 Python 之禅么? 通过 import this 语句可以获取其具体的内容.它告诉大家何 ...
- JVM知识点总览-高级Java工程师面试必备
jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理 这里画了一个思维导图, ...
- [转帖]Linux中buff/cache内存占用过高解决办法
Linux中buff/cache内存占用过高解决办法 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html /proc/sys/vm/drop_cac ...
- Word 插入目录详细教程 -- 视频教程(6)
>> 视频教程链接:B站,速度快,清晰 更多关于插入目录的方法,参看:Word插入目录系列 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- for循环与if条件语句的复习运用
鉴于前面学了不少基础了,今天没有学新的内容.boyfriend给我出了几道简单的题目,慢慢的进步中. 1.# 计算1-100之间所有偶数的和 def sum(): sumone = 0 for i i ...
- python 字符串替换功能 string.replace()可以用正则表达式,更优雅
说起来不怕人笑话,我今天才发现,python 中的字符串替换操作,也就是 string.replace() 是可以用正则表达式的. 之前,我的代码写法如下,粗笨: 自从发现了正则表达式也生效后,代码变 ...