编程范式

javascript函数式编程简单介绍

点点圈 提交于 2019-12-01 06:55:31
函数式编程在前端已经成为了一个热门的话题,近几年很多的应用程序代码库里大量使用着函数式编程思想。这里对JavaSctipt中的函数式编程做一个简单介绍。 什么是函数式编程 函数式编程是一种编程范式,主要是利用函数把运算过程封装起来,通过组合各种函数来计算结果。函数式编程意味着开发者可以在更短的时间内编写具有更少错误的代码。 函数式编程的简单例子 假设要把一个字符串转换成每个单词首字母大写,可以这样来实现: var string = 'i do like yanggb'; var result = string .split(' ') .map(v => v.slice(0, 1).toUpperCase() + v.slice(1)) .join(' '); 在这个例子中,为了得到想要的结果,先调用split()方法将字符串转换成数组,然后再调用map()方法把各个元素的首字母转换成大写,最后再调用join()方法把数组转换成字符串。这里的整个过程就是join(map(split(str))),体现了函数式编程的核心思想:通过函数对数据进行转换。 函数式编程的两个基本特点 通过上面的例子可以得到函数式编程有两个基本特点: 1.通过函数来对数据进行转换。 2.通过串联多个函数来求最终结果。 与 命令式编程、 声明式编程的对比 这里简单对比下函数式编程与命令式编程、声明式编程的区别。

编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)

天大地大妈咪最大 提交于 2019-11-30 22:34:11
命令式编程 :命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。 声明式编程 :告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。 函数式编程 : 和声明式编程是有所关联的,因为他们思想是一致的:即只关注做什么而不是怎么做。但函数式编程不仅仅局限于声明式编程。 函数式编程最重要的特点是“函数第一位”,即函数可以出现在任何地方,比如你可以把函数作为参数传递给另一个函数,你还可以将函数作为返回值。 命令式编程: 命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。 比如:如果你想在一个数字集合 collection(变量名) 中筛选大于 5 的数字,你需要这样告诉计算机: 第一步,创建一个存储结果的集合变量 results; 第二步,遍历这个数字集合 collection; 第三步:一个一个地判断每个数字是不是大于 5,如果是就将这个数字添加到结果集合变量 results 中。 代码实现如下: List<int> results = new List<int>(); foreach(var num in collection) { if (num > 5) results.Add(num); } 很明显,这个样子的代码是很常见的一种,不管你用的是 C, C++ 还是 C#, Java,

函数式编程杂谈

☆樱花仙子☆ 提交于 2019-11-29 18:37:20
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/gqw57pBYB4VRGKmNlkAODg 作者:张文博 比起命令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断演进,逐层推导出复杂的运算。本文通过函数式编程的一些趣味用法来阐述学习函数式编程的奇妙之处。 一、编程范式综述 编程是为了解决问题,而解决问题可以有多种视角和思路,其中普适且行之有效的模式被归结为“编程范式”。编程语言日新月异,从汇编、Pascal、C、C++、Ruby、Python、JS,etc...其背后的编程范式其实并没有发生太多变化。抛开各语言繁纷复杂的表象去探究其背后抽象的编程范式可以帮助我们更好地使用computer进行compute。 1.命令式 计算机本质上是执行一个个指令,因此编程人员只需要一步步写下需要执行的指令,比如:先算什么再算什么,怎么输入怎么计算怎么输出。所以编程语言大多都具备这四种类型的语句: 运算语句将结果存入存储器中以便日后使用; 循环语句使得一些语句可以被反复运行; 条件分支语句允许仅当某些条件成立时才运行某个指令集合; 以及存有争议的类似goto这样的无条件分支语句。 使得执行顺序能够转移到其他指令之处。 无论使用汇编、C、Java、JS 都可以写出这样的指令集合

函数式编程很难,这正是你要学的原因

廉价感情. 提交于 2019-11-29 13:25:54
很奇怪不是,很少有人每天都使用函数式 编程语言 。 如果你用Scala,Haskell,Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像 Python,Ruby,Java或C#等面向对象的编程语言——它们用起来很顺手。不错,你也许会偶然用到一两个“函数式语言特征”,例如 “block”,但人们不会去做函数式编程。 然而,很多年来,我们一直被教导说函数式编程语言很好很棒。我仍然记得当我第一次阅读 ESR的著名的关于学习Lisp语言的论文 时的困惑。也许大多数的人对 Paul Graham 的《Beating The Averages》 这篇文章更加熟悉: 使用Lisp开发使我们的开发周期迭代的如此之快,以至于有时当竞争对手在新闻发布会上推出他们的新功能一两天后,我们就能复制出同样的功能。当报道产品发布的新闻记者打电话给我们时,我们的产品已经拥有了同样的功能特征。 那些皈依函数式编程的人中,一直常见的考虑是:学习这种新的、函数式的语言“对你有好处”;就像是某些人建议说每天30分钟的健身房活动会“让你的 身体健康”一样。但这也同时暗示了这样做的难度和需要的付出。Lisp语言跟Haskell、Ocaml和Scala语言不同,被认为是出了名的难学,可 以说是臭名昭著。文雅的人说这是Lisp语言的“深度&广度”的体现。不文雅的人说这是“意淫

MapReduce分布编程模型之函数式编程范式

拟墨画扇 提交于 2019-11-29 09:27:56
导读: 计算机科学是算法与算法变换的科学,算法是计算机科学的基石。 任何一个计算问题的分析与建模,几乎都可以归为算法问题。 MapReduce算法模型是由Google公司针对大规模群组中的海量数据处理而提出的分布编程模型,主要应用于大规模数据集{大于1TB}的分布并行运算。 在MapReduce模型中的Map{映射}和Reduce{化简}创意来自函数型编程语言,同是也继承了向量型编程语言的特性。 MapReduce模型能够使程序员在不了解分布式并行编程的情况下,将自己书写的程序在分布式系统上运行。MapReduce模型主要实现了映射与化简两个核心功能,分别由Map和Reduce完成,这两个函数也是函数型语言中常用的函数,由用户负责实现。 Map函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集。而Reduce函数是从两个或更多个Map结果中,通过多个线程、进程或者独立系统并行执行处理的结果进行分类和归纳。 一个Map函数用来把对映象成一组新的键值对,Reduce函数用来对同一个键的值进行合并。 下面给大家着重介绍一下函数式编程范式,函数式编程是一种编程范式,在这种编程范式中,更多地使用了函数运算。 函数型语言与函数式编程 函数型语言是一种典型的程序设计语言。函数型语言的特点是把问题求解过程表示成块结构,对调用块的调用者来说,每个块都有输入数据和经过加工处理后的输出数据

DSL与函数式编程

一个人想着一个人 提交于 2019-11-28 19:33:49
一直看到这个英文缩写,但是不知道它具体是啥东西,google几次都讲的非程序层面的意思,找到一篇还不错的介绍文章,转载过来... 出自: http://mzhou.me/?p=95219 什么是DSL? DSL即领域编程语言,它是用于解决特定领域问题的语言。与GPPL(通用目的编程语言)相比,DSL针对的目标是特定的领域。其实DSL并不是什么高深的东西,SQL、正则表达式、CSS等等都是一种DSL。对于前端工程师来说jQuery就是一种DSL。 DSL可以分为两种:内部DSL、外部DSL。外部DSL是自我包含的语言,它们有自己特定语法、解析器和词法分析器等等,它往往是一种小型的编程语言,甚至不会像GPPL那样需要源文件。与之相对的则是内部DSL。内部DSL其实更像是种别称,它代表一类特别API及使用模式[1]。jQuery就是一种内部DSL,而CSS则是一种外部DSL。 $(".selector").text("display text") .append("<div>children</div>") .show(); 使用DSL的好处就是:我们可以更关注做什么(What)而不是怎么做(How)! jQuery是一门用于解决多种浏览器上javascript 执行兼容性的DSL,它提供了一组API用于Web前端开发的通用功能:DOM、AJAX、Event等等。众所周知

开始学习函数式编程后对编程的一些新感受

浪尽此生 提交于 2019-11-28 14:24:54
我们绝大多数程序员都是用命令式编程,因为学校教的编程就是命令式的,什么C、Java等等(当然他们也可以用函数式编程)。函数式编程和命令式编程不是一个相对应层次的概念。理论上, 函数式编程 的理论基础是Lambda演算,指令式编程基于图灵机。从程序员角度来看,函数式编程不支持赋值操作,一个函数的执行只会返回一个值,不会有任何副作用,所以看上去,一个函数就是一个大的表达式。 这里不再深入去谈函数式编程,更多可以看看前面提到的那个专题。 1. 编程到底是什么? 编程(程序设计)实际上是一个对现实世界中的事物抽象,并由计算机语言实现的过程。核心的步骤就包含三个:理解、抽象、实现。 不同的理解思路,会导致完全不同的抽象结果;不同的抽象结果就会提供各不同的理解。最后根据理解和抽象,由特定的语言完成时间,但其结果要想完全理解还需要前两个步骤支撑。 有点像建筑中的“房子是什么,房地产设计,盖房子”。 2. 编程的发展过程到底有哪些? 程序设计的历史,按照我的理解大致的几个主要阶段: 计算机程序设计历史前阶段;主要是纸带、存储器等原始方式。 计算机语言初级阶段;主要以汇编语言为主,面向的主要内容是“ 数据存储+指令集”; 计算机广泛工业语言设计阶段;主要以C语言为主的大面积应用,此时由C语言更面向人易懂的方向发展。并且操作系统,编译器,数据库软件开始发展;面向的主要内容是“ 程序=算法+数据结构 ”

函数式编程

久未见 提交于 2019-11-28 13:11:42
函数式编程简介什么是函数式编程 函数式是一种编程范式 函数式编程特点 把计算看做是函数而不是一系列指令 纯函数式编程不需要变量 , 测试简单 支持高阶函数 , 代码简洁 Python支持的函数式编程的特点 不是纯函数式编程 , 支持有变量存在 支持高阶函数 , 函数可以作为变量传入 支持闭包 , 有了闭包就可以返回函数 有限度的支持匿名函数 3.2 Python中的高阶函数 高阶函数 : 可以接收函数作为参数的函数就是高阶函数 变量可以指向函数 函数名就是指向函数的变量 函数的参数可以接收变量 一个函数可以接收另一个函数作为参数 实例 import math def add(x, y, f): return f(x) + f(y) def sqrt(i, j, k): return k(i) + k(http://www.amjmh.com/v/BIBRGZ_558768/) if __name__ == '__main__': print(add(-5, 9, abs)) print(sqrt(9, 16, math.sqrt)) ———————————————— 来源: https://www.cnblogs.com/liyanyan665/p/11408541.html