函数化编程

更新日期: 2019-09-11阅读: 2.1k标签: 编程

百科定义:
函数化编程: 又称泛函数编程,是一种编程泛式,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。简单理解,以函数为单元,对复杂逻辑进行拆分,将复杂逻辑转化为多个简单函数逻辑,同时通过对函数进行层层调用,来达到最终目的。
特点: 函数可以作为参数传入,也可以作为返回值返回。


1. 纯函数 && 非纯函数

定义: 输入一个x产生输出一个唯一y值
特点:
1. 输入相同的值时,输出也是一样的,不受外部环境影响
2. 运行时,无副作用,不对外部环境产生影响

Array.prototype.slice;
function add(a) {
        return a+1
}
add(1)
add(1) 

那么非纯函数则是正好相反:易受外部环境影响,提高了系统复杂性。

    var arr = [1, 3, 5, 6];
    arr.splice(0,1) ==> [1]
    arr.splice(0,1) ==> [3]
    var b = 34;
    function add(a) {
      return a + b;
    }

纯函数是函数编程的基础,那么如何将非纯函数转化为纯函数呢?


2. 函数柯里化(curry)

简单的定义就是:将一个低阶函数转化为高阶函数的过程被称之为柯里化。
这样说未免有点不太清楚,就是将一个需要传入多个参数的函数转化为多个只需要传入一个参数的函数。

function (arg1, arg2, arg3) ==> function(arg1)(arg2)(arg3)
      
function add(a, b){
      return a+b
 }
add(1,2)

function add(a) {
   return function(b){
       return a+b;
   }
}
add(1)(2)

这样一看是不是就清楚的多了,其中有提到一个概念高阶函数,那么什么是高阶函数呢? 高阶函数: "Higher-order function",js中的函数都是指向某个变量的,那么同样可以指向某个函数,同理,也可以将某个函数作为返回值,返回。

所谓的高阶函数,就是可以接受一个函数为参数或返回一个函数的函数。

var arr = [1,2,34]
arr.map(function(item, index){
   return item*2
})
      
function add(a, b, fn){
   return fn(a) + fn(b)
}

3. 声明式语句 && 命令式语句

顾名思义,命令式语句是,一步一步的指令,告诉你要怎么做,而声明式语句,则是只需要说要什么,具体怎么做,你自己看着办

//命令式:
var arr = [1, 2, 4, 5],result = [];
for(var i = 0; i< arr.length; i++) {
   result.push(arr[i])
}
  
//声明式:
var result = arr.map(function(item){return item})
//从这两个例子,就可以清楚的看到命令式语句和声明式语句的区别了

通过上面的内容,已经对js函数化编程有了一个较为基础的浅显的认识,至于更深层次的认识,就需要看看其他大佬的文章了。


链接: https://fly63.com/article/detial/5865

程序员的笔记,编程写软件学到的 7 件事

如果你真的做出了一些东西,在面对那些令人眼花缭乱的理论知识,或是和你相似甚至比你做的更糟糕的人时大可不必谦虚。在一天结束之时,正是那些在战壕中的开发者——构建、测试和开发了代码的人,真正做了事情。

自学编程的六个技巧总结

这些事情可以帮助新手在他们漫长的旅程中学习编程。我知道我还有更多东西需要学习,并将继续学习如何永远地学习。最重要的事情说三遍,请继续,不要放弃,不要放弃,不要放弃。

谈谈Javascript异步代码优化

Javascript代码异步执行的场景,比如ajax的调用、定时器的使用等,在这样的场景下也经常会出现这样那样匪夷所思的bug或者糟糕的代码片段,那么处理好你的Javascript异步代码成为了异步编程至关重要的前提

编程到底难在哪里?

以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析,理清其涉及的所有细节,预测可能发生的所有意外与非意外的情况,列出解决方案的所有步骤,以及对解决方案进行尽量全面的测试。而这些正是我认为编程难的地方。

Blockly - 来自Google的可视化编程工具

Google Blockly 是一款基于Web的、开源的、可视化程序编辑器。你可以通过拖拽块的形式快速构建程序,而这些所拖拽的每个块就是组成程序的基本单元。可视化编程完成

我真是受够编程了

成为伟大的程序员,需要付出许多编程之外的努力。我们的大脑是有限的,每天要应付的问题复杂到足以让人精神崩溃。当工作不顺利时,多少都会有些冒名顶替症候群的感觉。

前端的编程软件哪些比较好用?

推荐8款最好用的前端开发工具供美工或者前端开发人员使用,当然若你是NB的全栈工程师也可以下载使用。Web前端开发最常见的编程软件有以下几种: 在前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code

如何保持学习编程的动力

学编程现在看起来挺简单,因为网上有丰富的各种资源。然而当你实际去学的时候就发现,还是很难!对我来说也一样。但从某天起,我决定认认真真学编程一年。后来又过了一年,又过了一年又一年……我好像有点感悟。

编程小技巧

命名最好遵循驼峰法和下划线法,并且要清楚的表达变量的意思。相对于驼峰法而言,我更喜欢下划线法。下划线法可以更清楚的看出这个变量表示的意思。比如aBigGreenBanana和一个a_big_green_banana。

CSS并不是真正的编程语言

每隔几个月就会出现一篇文章表明:CSS并不是真正的编程语言。以编程语言的标准来说,CSS过于困难。使用这门语言会很有创造性:事实确实如此,CSS不同于传统的编程,且具有缺陷,同任何标准化编程语言相比

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!