美文网首页
函数式编程

函数式编程

作者: Vector_Wan | 来源:发表于2019-06-20 15:44 被阅读0次

将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程
我们可以看到,函数式编程中,函数不仅直接调用,也可以当成参数被其他函数调用。
因此,进一步,如果我不仅想把函数当参数,还想传入值,所以再封装一下,函数和值封装后是什么。

函数->行为
值->属性
没错就是这就是对象

将业务逻辑细化,抽象,封装成一个个对象,并借助语言,库,组件,框架等,将整个业务流程转化为对象之间的相互调用,这就是面向对象编程
因此,这么看来,函数式跟面向对象的思想其实都是一致的,即对逻辑的抽象与封装。

上面说了这么多还是有一点抽象,我们来举一个具体的例子,这个例子来自于博客:‘初开之道’

这几年大数据很火,在java中,有一个它的代名词hadoop,它的编程模型叫做MapReduce

什么是MapReduce呢,想象下有个图书馆,里面有十排书架,我想统计下有多少书,需要一个个数,如果用更快的方式怎么做。

找十个人,每人数一排;
将每个人的结果求和;
用MapReduce写一下这个问题

首先定义两个方法 map reduce

map() //对数据执行分批并行操作
reduce() //对操作所有返回值求结果

然后是数书的操作定义两个方法

countBook() //数一排书
sum()//求和

那么这次数书操作可表示为

map(countBook()).reduce(sum())

ok,再进一步,现在我们有了map,reduce两个方法,下面可以进行花式数书了,我想统计下数学书

定义方法

countMathBook();

你会很快写出

map(countMathBook()).reduce(sum());    

但是,我们需要拥抱变化,所以现在需求变了,我想知到十个书架中,书最多的书架的是哪一个

因此方法在此

max() //求最大值

map(countBook()).reduce(max())

然后需求又变了我想知到十个书架中,数学书最多的书架的是哪一个

现在不需要考虑了

map(countMathBook()).reduce(max())

我想要求最小的呢

map(countBook()).reduce(min())

我想要求红色书的数量呢

map(countRedBook()).reduce(sum())

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:函数式编程

      本文链接:https://www.haomeiwen.com/subject/rnfjqctx.html