zoukankan      html  css  js  c++  java
  • 函数式编程之纯函数

    纯函数 我们应该还记得初中的一些数学知识,函数f的概念就是,对于输入x产生一个输出y=f(x),这就是普通的纯函数。它的定义是 相同的输入,结果总会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态。

    最常见的一个例子就是在我们操作数组的时候slice就是纯函数,splice就是不纯的,看下面的例子

    <script> 
        var arr = [1,2,3,4,5,6] ;
        console.log(arr.slice(0,3))//1,2,3
        console.log(arr.slice(0,3))//1,2,3这是纯函数相同输入总是得到相同的输出,可以这很函数式
        console.log(arr.splice(0,3))//1,2,3
        console.log(arr.splice(0,3))//4,5,6不纯的相同输入,不同输出
    </script>

    我们不希望splice,因为它会把原来数据弄得一团糟

    不依赖外部状态 看看下面这个例子

      var i = 20 ;
        function test(num) {
            if(num>i){//这里的行为是由外部环境决定的 将来会有很多不可预知的问题
                //..dosomething
            }else {
                //..dosomething
            }
         }
        test(22) ;
        
        function test(num) {
            if(num>20){//虽然这里扩展性差但是,可以这很纯,不会因为外部环境改变而影响
                //..dosomething
            }else {
                //..dosomething
            }
         }
        test(22) ;

     这里我们可以用柯里化解决扩展性问题

    function test(min) {
            return function(num) {
                if(num>min) {
                console.log('大于20') ;
                }else{
                console.log('小于20')
                }
            }
        }
        var compare = test(20) ;
        compare(20) ;//大于20

    柯里化就是先传递部分参数返回一个函数去处理剩下的参数(这里因为闭包对参数进行保存)

  • 相关阅读:
    core dump相关
    编译与链接的问题
    shell和awk配合使用
    cybergarage-upnp
    miniupnpc
    openssl
    在 linux 下使用 CMake 构建应用程序
    Ubuntu下的多线程下载工具:MultiGet;并与 Firefox 建立关联 uget
    嵌入式web服务器-thttpd
    Android_Layout_xml布局
  • 原文地址:https://www.cnblogs.com/Zwq286179/p/6125209.html
Copyright © 2011-2022 走看看