泛函编程(0)-什么是泛函编程

简介:

 什么是泛函编程(Functional Programming)?泛函编程就是用函数编写程序。这个回答太抽象,等于没说。

再说清楚一点:泛函编程就想砌积木一样把函数当成积木块,把函数的输出输入作为积木的楔子和楔孔,把一个函数的输出当作另一个函数的输入组合成一个更大的函数。整个砌积木的过程就是泛函编程。嗯,这个稍微清楚了一点,不过这样做来干什么呢?相对于泛函编程模式还有指令编程模式(Imperative Programming)。我们熟悉的OOP编程就是指令编程模式。在指令编程中我们按顺序用一条条指令改变程序中的一些变量来实现整个程序状态转变。而在泛函编程中我们首先按照程序要求把一些特定的函数用特定的方式组合起来形成另一个独立的大函数;然后把一些东西输入到这个大函数的输入口;当输入物经过那条由内部组件函数输入输出形成的曲折通道到达输出口时就产生了需要的结果(很像输入物件的变形过程)。输入物每经过一个组件函数,程序的状态就会发生一些转变,整个过程实际上就是程序的状态变形(Program State Transformation)。那么,可不可以说指令编程就对应变量赋值,泛函编程相当于函数组合呢?实际上“函数组合”这个词是泛函编程的灵魂,英文是Functional Composition。这么说是不是又清楚了一点了?不过对于我们这些用了一辈子OOP编程的人来说,相对于用一条指令设定一个变量直接看到结果来说,泛函编程实现状态转变的方式是那么的奇妙又不可琢磨。不用担心,改变观念是需要过程的。要知道泛函编程是一个全新的编程范畴。

    如果泛函编程就是组合函数,那这可是一种全新的编程方式。如何实现函数的组合呢?泛函编程是以数学理论(⋋-culculus)为基础的,程序函数的组合是通过数学函数组合定律来实现的。嗯,的确是一套全新的概念,那就让我们从头学起吧。

相关文章
|
3月前
|
移动开发 C语言
C语言中的#和##你还傻傻分不清楚吗
简单介绍两者的用途并以代码的形式举例
|
3月前
|
Go
IsNil() 和 IsValid() 的精妙运用
IsNil() 和 IsValid() 的精妙运用
33 0
|
7月前
|
存储 Java
i++和++i傻傻分不清楚?这里给你最清楚的解答
i++和++i傻傻分不清楚?这里给你最清楚的解答
i++和++i傻傻分不清楚?这里给你最清楚的解答
编程问题
hessian方法重载导致报错
|
C语言 Perl
西门子S7-1200有哪几种编程方法?什么是线性化编程、模块化编程、结构化编程?
今天我们来说一说西门子S7-1200有哪几种编程方法,给大家简单介绍一下什么是线性化编程、模块化编程和结构化编程。
西门子S7-1200有哪几种编程方法?什么是线性化编程、模块化编程、结构化编程?
|
XML SQL 开发框架
C#十种语法糖
C#十种语法糖
116 0
C#十种语法糖
[]*T *[]T *[]*T 傻傻分不清楚(下)
作为一个 Go 语言新手,看到一切”诡异“的代码都会感到好奇;比如我最近看到的几个方法;
[]*T *[]T *[]*T 傻傻分不清楚(上)
作为一个 Go 语言新手,看到一切”诡异“的代码都会感到好奇;比如我最近看到的几个方法;
|
Java API 容器
函数式编程思维在三行代码情书中的应用
函数式编程概述 如今主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面的扩充,这是一个大趋势。以Java为例,随着 Lambda块 和 Stream API 等这种高阶函数的加持,Java总算是装备了函数式这一利器;博大精深的C++也在2011版的语.
2745 0
最简单的编程问题
1. 判断某个数是否是偶数 int num = 10; if((num & 1) == 0){ // 偶数 } else { // 奇数 } 2.
868 0