美文网首页
函数式编程

函数式编程

作者: KK_boy | 来源:发表于2018-10-26 19:35 被阅读9次

    1、函数真没什么特殊的,你可以像对待任何其他数据类型一样对待它们——把它们存在数组里,当作参数传递,赋值给变量...等等。

    扩展特性
    Object.isExtensible 方法
    Object.preventExtensions 方法

    密封特性
    Object.isSealed 方法
    Object.seal 方法

    冻结特性
    Object.isFrozen 方法
    Object.freeze 方法

    浅冻结 与 深冻结

    2、纯函数
    纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

    函数式编程的哲学就是假定副作用是造成不正当行为的主要原因。

    我们可以使用一种叫做“等式推导”(equational reasoning)的技术来分析代码。

    面向对象语言的问题是,它们永远都要随身携带那些隐式的环境。你只需要一个香蕉,但却得到一个拿着香蕉的大猩猩...以及整个丛林
    

    3、纯函数的好处
    可缓存性(Cacheable)、可移植性/自文档化(Portable/Self-Documenting)、可测试性(Testable)、合理性(Reasonable)

    4、柯里化 (curry)
    curry 的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

    5、组合 (compose)
    两个函数组合之后返回了一个新函数是完全讲得通的:组合某种类型(本例中是函数)的两个元素本就该生成一个该类型的新元素。把两个乐高积木组合起来绝不可能得到一个林肯积木。所以这是有道理的,我们将在适当的时候探讨这方面的一些底层理论。

    在 compose 的定义中,g 将先于 f 执行,因此就创建了一个从右到左的数据流。这样做的可读性远远高于嵌套一大堆的函数调用

    让代码从右向左运行,而不是由内而外运行

    pointfree 模式指的是,永远不必说出你的数据。

    范畴学(category theory)是数学中的一个抽象分支,能够形式化诸如集合论(set theory)、类型论(type theory)、群论(group theory)以及逻辑学(logic)等数学分支中的一些概念。范畴学主要处理对象(object)、态射(morphism)和变化式(transformation),而这些概念跟编程的联系非常紧密

    范畴:
    对象的搜集
    态射的搜集
    态射的组合
    identity 这个独特的态射

    组合像一系列管道那样把不同的函数联系在一起,数据就可以也必须在其中流动——毕竟纯函数就是输入对输出,所以打破这个链条就是不尊重输出,就会让我们的应用一无是处。
    我们认为组合是高于其他所有原则的设计原则,这是因为组合让我们的代码简单而富有可读性。另外范畴学将在应用架构、模拟副作用和保证正确性方面扮演重要角色。

    6、示例应用

    // 命令式
    var makes = [];
    for (i = 0; i < cars.length; i++) {
      makes.push(cars[i].make);
    }
    
    
    // 声明式
    var makes = cars.map(function(car){ return car.make; });
    

    命令式:怎么做
    声明式:做什么

    7、特百惠
    函数式的程序即通过管道把数据在一系列纯函数间传递的程序。

    相关文章

      网友评论

          本文标题:函数式编程

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