zoukankan      html  css  js  c++  java
  • 什么是函数式编程

    个人理解,如果有不对的地方还请指出。

    函数式编程的英文是 functional programming

    functional这个单词被翻译成了函数式,大家也叫函数式编程

    functional这个英文在数学中的意思是——泛函

    所以functional programming 其实可以被称为 泛函编程!

    数学中的几个名词:

    map 映射

    function 函数

    functional 泛函

    对于map和function的区别, 网上有一段解释是这样的

    They are more or less the same. Mathematically, mapping is finding the image of an element from the domain within the range and a function is the one that maps it. In category theory, at least, a map is more general. All funtions are maps but not allmaps are functions.

    ,我们先把映射和函数理解为一个东西好了。

    ,然后说一下 泛函:

    泛函对应于一般函数的区别是:

    ( 这个是函数

    (这个是泛函

    也就是说泛函中  定义域是函数组成的集合,  对于定义域中给定的函数,按某一法则有与之对应的元素.

    函数包含泛函,其定义域可以为元素,也可以为函数...

    也就是说

    相比于接受普通实数(元素) 的函数,

    泛函的自变量是函数(对应法则)组成的。

    知道上面这些以后,就理解functional programming...

      (也就是说,函数作为自变量 , 可以传到函数中进行运算的编程模式。

    那么这种编程模式有什么好处呢 为什么要提倡..

    1.早期C语言..面向过程的编程, 也就是给出算法整个从头撸到尾,

    代码直接暴力,但是不好维护。你让另一个人看这个代码,必须也从头看到尾,才明白这个代码想干什么。

    2.后来出现了面向对象编程,。对象也就是结构体(结构体是C语言中的概念),

     通过操作对象,给对象添加方法属性,对象抽象出类这些概念,写出的代码更好维护,

    虽然给机器看可能会比直接撸的方法代码多一点,效率低一点,

    但是整个过程给人类看起来更加简明。 一个一个对象,抽象出的类,更符合人类世界是感官直觉。代码也就更好维护。

    3.函数式编程,也是一种编程理念,本质也是抽象过程,让人类更好理解维护。就拿函数式编程中的compose函数为例,

    compose(...fns) 这个函数的传入参数是"多个函数",返回一个函数,返回的这个函数接受参数并把参数传给...fns中的最后一个函数执行,最后一个函数执行的返回值作为参数给倒数第二个函数执行,执行的结果作为参数给倒数第三个函数执行....依次直到fns中的第一个函数,执行后返回最终结果。

    比如compose(toUppercase,Greeting)

    例如Greeting函数会输出"hello"

    那么你应该能直接看出,这行代码的预期结果是,会输出一个大写的HELLO

    记住:目的是让人类更好理解维护。

    * λ演算,是数学家研究的一套变换规则 其中有提到用匿名函数替代实名函数,也引出了柯里化方法等等... (想一下使用数组map方法时传入的匿名函数...

    *高阶函数算是一个实际应用(其实就是设计模式中的装饰器模式)

  • 相关阅读:
    spring与hibernate整合使用properties文件分离数据库连接设置
    Android的Selector使用
    Linux中的软链接、硬链接
    JDK自带线程池解析
    shell的控制流程语句
    [转] 对于javascript的function的总结
    [#转#]经典的帖子:多态分析1
    [转]javascript 中数组使用方法汇总
    struts中设置指令牌
    关于指令牌一个有趣的帖子
  • 原文地址:https://www.cnblogs.com/eret9616/p/10115707.html
Copyright © 2011-2022 走看看