首页 > 技术文章 > 编程模式

xiaowater 2018-11-21 15:07 原文

代码是可工作的
代码是可读性高的
代码是简单的
代码是高内聚的
代码是低耦合的
 
对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型。

编程模型:面向对象&面向过程

面向对象编程中,我们说,类是现实事物的一种抽象表示。那么抽象的最大作用在我看来就在于抽象事物的重用性,一个事物越具体,那么他的可重用性就越低,因此,我们再打造可重用性代码,类,类库时,其实在做的本质工作就在于提高代码的抽象性。而再往大了说开来,程序员做的工作,就是把一系列过程抽象开来,反映成一个通用过程,然后用代码表示出来。
 
传统的命令式语言比如:Fortran C和Pascal都是面向过程的,它们主要的程序设计单元是过程。它们采用一种自顶向下的编程风格。现代的命令式语言比如:C++ Java和C#则是面向对象的,它们将对象作为程序的基本单元,将程序和数据封装其中,通过对象的之间的协作来解决问题。面向过程和面向对象是命令式语言主要的两种风格。
 
命令式编程语言泛指所有把修改变量的值当作最基本计算方式的语言,函数式编程语言指把一个程序的输出定义为其输入的数学函数的语言,纯函数式编程没有内部状态的概念,也没有副作用。

函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。
特性:并发&变量的不变性
 
在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数。
在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处。
 
一切问题,归根结底到最后都是数学问题。编程从来都不是难事儿,无非是细心,加上一些函数类库的熟悉程度,加上经验的堆积,而真正困难的,是如何把一个实际问题,转换成一个数学模型
 
在函数式编程中,我们则是在将函数方法抽象,函数一样是可重用,可置换的抽象单位。那么我们说函数式编程的抽象本质则是将函数也作为一个抽象单位,而反映成代码形式,则是高阶函数。
 
递归与循环在编程模型和思维模型上最大的区别则在于:
循环是在描述我们该如何地去解决问题。
递归是在描述这个问题的定义。
 
函数式编程的应用场合:1. 数学推理 2. 并行程序
 
函数式语言是跟打交道的,基础是表达式,命令式语言是跟状态打交道的,基础是语句。这就是两者设计上的根本不同,命令式程序可以看成一个指令序列,通过改变存储单元的值来改变机器状态来实现算法。而函数式语言可以看成一个由输入到输出的函数,而这个函数又由其他函数或者自身来构造。实现算法的过程就是由语言提供的原始函数逐步构造一个符合算法要求的函数的过程。

 

编程模式 - DaySpring - DaySpring
 

 

推荐阅读