位置: 编程技术 - 正文

Javascript函数式编程语言(js函数的使用规则)

编辑:rootadmin

推荐整理分享Javascript函数式编程语言(js函数的使用规则),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript数学函数,javascript数学函数,javascript数学函数,js函数详解,javascript数学函数,javascript 函数,javascript 函数,javascript 函数,内容如对您有帮助,希望把文章链接给更多的朋友!

函数式编程语言

函数式编程语言是那些方便于使用函数式编程范式的语言。简单来说,如果具备函数式编程所需的特征, 它就可以被称为函数式语言。在多数情况下,编程的风格实际上决定了一个程序是否是函数式的。

是什么让一个语言具有函数式特征?

函数式编程无法用C语言来实现。函数式编程也无法用Java来实现(不包括那些通过大量变通手段实现的近似函数式编程)。 这些语言不包含支持函数式编程的结构。他们是纯面向对象的、严格非函数式的语言。

同时,纯函数语言也无法使用面向对象编程,比如Scheme、Haskell以及Lisp。

然而有些语言两种模式都支持。Python是个著名的例子,不过还有别的:Ruby,Julia,以及我们最感兴趣的Javascript。 这些语言是如何支持这两种差别如此之大的设计模式呢?它们包含两种编程范式所需要的特征。 然而对于Javascript来说,函数式的特征似乎是被隐藏了。

但实际上,函数式语言所需要的比上述要多一些。到底函数式语言有什么特征呢?

特点 命令式 函数式 编程风格 一步一步地执行,并且要管理状态的变化 描述问题和和所需的数据变化以解决问题 状态变化 很重要 不存在 执行顺序 很重要 不太重要 主要的控制流 循环、条件、函数调用 函数调用和递归 主要的操作单元 结构体和类对象 函数作为一等公民的对象和数据集

函数式语言的语法必须要顾及到特定的设计模式,比如类型推断系统和匿名函数。大体上,这个语言必须实现lambda演算。 并且解释器的求值策略必须是非严格、按需调用的(也叫做延迟执行),它允许不变数据结构和非严格、惰性求值。

优点

当你最终掌握了函数式编程它将给你巨大的启迪。这样的经验会让你后面的程序员生涯更上一个台阶, 无论你是否真的会成为一个全职的函数式程序员。

不过我们现在不是在讨论如何去学习冥想;我们正在探讨如何去学习一个非常有用的工具,它将会让你成为一个更好的程序员。

总的来说,什么是使用函数式编程真正实际的优点呢?

更加简洁的代码

函数式编程更简洁、更简单、更小。它简化了调试、测试和维护。

例如,我们需要这样一个函数,它能将二维数组转化为一维数组。如果只用命令式的技术,我们会写成这样:

现在使用函数式技术,可以写成这样:

这两个函数具有同样的输入并返回相同的输出,但是函数式的例子更简洁。

模块化

函数式编程强制把大型问题拆分成解决同样问题的更小的情形,这就意味着代码会更加模块化。 模块化的程序具有更清晰的描述,更易调试,维护起来也更简单。测试也会变得更加容易, 这是由于每一个模块的代码都可以单独检测正确性。

复用性

由于其模块化的特性,函数式编程会有许多通用的辅助函数。你将会发现这里面的许多函数可以在大量不同的应用里重用。

在后面的章节里,许多最通用的函数将会被覆盖到。然而,作为一个函数式程序员,你将会不可避免地编写自己的函数库, 这些函数会被一次又一次地使用。例如一个用于在行间查找配置文件的函数,如果设计好了也可以用于查找Hash表。

减少耦合

耦合是程序里模块间的大量依赖。由于函数式编程遵循编写一等公民的、高阶的纯函数, 这使得它们对全局变量没有副作用而彼此完全独立,耦合极大程度上的减小了。 当然,函数会不可避免地相互依赖,但是改变一个函数不会影响其他的,只要输入和输出的一对一映射保持正确。

Javascript函数式编程语言(js函数的使用规则)

数学正确性

最后一点更理论一些。由于根植于lambda演算,函数式编程可以在数学上证明正确性。 这对于一些研究者来说是一个巨大的优点,他们需要用程序来证明增长率、时间复杂度以及数学正确性。

我们来看看斐波那契数列。尽管它很少用于概念性证明以外的问题,但是用它来解释这个概念非常好。 对一个斐波那契数列求值标准的办法是建立一个递归函数,像这样:

还需要加上一个一般情形:

这使得递归可以终止,并且让递归调用栈里的每一步从这里开始累加。

下面列出详细步骤

然而,在一个懒执行函数库的辅助下,可以生成一个无穷大的序列,它是通过数学方程来定义整个序列的成员的。 只有那些我们最终需要的成员最后才会被计算出来。

第二个例子明显更有数学的味道。它依赖Lazy.js函数库。还有一些其它这样的库,比如Sloth.js、wu.js, 这些将在第三章里面讲到。

我插几句:后面这个懒执行的例子放这似乎仅仅是来秀一下函数式编程在数学正确性上的表现。 更让人奇怪的是作者还要把具有相同内部函数的懒加载写两遍,完全没意义啊…… 我觉得各位看官知道这是个懒执就行了,不必深究。

非函数式世界中的函数式编程

函数式和非函数式编程能混合在一起吗?尽管这是第七章的主题,但是在我们进一步学习之前, 还是要弄明白一些东西。

这本书并没要想要教你如何严格地用纯函数编程来实现整个应用。这样的应用在学术界之外不太适合。 相反,这本书是要教你如何在必要的命令式代码之上使用纯函数的设计策略。

例如,你需要在一段文本中找出头四个只含有字母的单词,稚嫩一些的写法会是这样:

函数式编程会写成这样:

如果有一个函数式编程的工具库,代码可以进一步被简化:

判断一个函数是否能被写成更加函数式的方式是寻找循环和临时变量,比如前面例子里面的“words”和”count”变量。 我们通常可以用高阶函数来替换循环和临时变量,本章后面的部分将对其继续探索。

Javascript是函数式编程语言吗?

现在还有最后一个问题我们需要问问自己,Javascript是函数式语言还是非函数式语言?

Javascript可以说是世界上最流行却最没有被理解的函数式编程语言。Javascript是一个披着C外衣的函数式编程语言。 它的语法无疑和C比较像,这意味着它使用C语言的块式语法和中缀语序。并且它是现存语言中名字起得最差劲的。 你不用去想象就可以看出来有多少人会因Javascript和Java的关系而迷惑,就好像它的名字暗示了它会是什么样的东西! 但实际上它和Java的共同点非常少。不过还真有一些要把Javascript强制弄成面向对象语言的主意, 比如Dojo、ease.js这些库曾做了大量工作试图抽象Javascript以使其适合面向对象编程。 Javascript来自于年代那个满世界都嚷嚷着面向对象的时代,我们被告知Javascript是一个面向对象语言是因为我们希望它是这样, 但实际上它不是。

它的真实身份可以追溯到它的原型:Scheme和Lisp,两个经典的函数式编程语言。Javascript一直都是一个函数式编程语言。 它的函数是头等公民,并且可以嵌套,它具有闭包和复合函数,它允许珂理化和monad。所有这些都是函数式编程的关键。 这里另外还有一些Javascript是函数式语言的原因:

&#; Javascript的词法包括了传递函数为参数的能力,具有类型推断系统,支持匿名函数、高阶函数、闭包等等。 这些特点对构成函数式编程的结构和行为至关重要。

&#; Javascript不是一个纯面向对象语言,它的多数面向对象设计模式都是通过拷贝Prototype对象来完成的, 这是一个弱面向对象编程的模型。欧洲电脑制造商协会脚本(ECMAScript)——Javascript的正式形式和标准实现 ——在4.2.1版本的规范里有如下陈述: “Javascript不具有像C++、Smalltalk、Java那样的真正的类,但是支持创建对象的构造器。 一般来说,在基于类的面向对象语言里,状态由实例承载,方法由类承载,继承只是针对结构和行为。 在EMACScript里,状态和方法由对象来承载,结构、行为和状态都会被继承。”

&#; Javascript是一个解释型语言。Javascript的解释器(有时被称为“引擎”)非常类似于Scheme的解释器。 它们都是动态的,都有易于组合和传输的灵活的数据类型,都把代码求值为表达式块,处理函数的方式也类似。

也就是说,Javascript的确不是一个纯函数式语言。它缺乏惰性求值和内建的不可变数据。 这是由于大多数解释器是按名调用,而不是按需调用。Javascript由于其尾调用的处理方式也不太善于处理递归。 不过所有的这些问题都可以通过一些小的注意事项来缓和。需要无穷序列和惰性求值的非严格求值可以通过一个叫Lazy.js的库来实现。 不可变量只需要简单的通过编程技巧就可以实现,不过它不是通过依赖语言层面来限制而是需要程序员自律。 尾递归消除可以通过一个叫Trampolining的方法实现。这些问题将在第六章讲解。

关于Javascript是函数式语言还是面向对象语言还是两者皆是还是两者皆非的争论一直都很多,而且这些争论还要继续下去。

最后,函数式编程是通过巧妙的变化、组合、使用函数而实现编写简洁代码的方式。而且Javascript为实现这些提供了很好的途径。 如果你真要挖掘出Javascript全部的潜能,你必须学会如何将它作为一个函数式语言来使用。

深入探讨javascript函数式编程 有时,优雅的实现是一个函数。不是方法。不是类。不是框架。只是函数。-JohnCarmack,游戏《毁灭战士》首席程序员函数式编程全都是关于如何把一个

javascript函数式编程程序员的工具集 如果你仔细看了到目前为止出现过的示例代码,你会发现这里面的一些方法不太熟悉。它们是map()、filter()和reduce()函数,它们对任何语言的函数式编程

JavaScript实现上下浮动的窗口效果代码 本文实例讲述了JavaScript实现上下浮动的窗口效果代码。分享给大家供大家参考。具体如下:这里介绍使用JavaScript实现上下浮动的窗口,在垂直方向上漂

标签: js函数的使用规则

本文链接地址:https://www.jiuchutong.com/biancheng/380309.html 转载请保留说明!

上一篇:Javascript函数式编程简单介绍(javascript中函数)

下一篇:深入探讨javascript函数式编程(深入探讨换个说法怎么说)

  • 企业一般会涉及哪些行业
  • 增值税销项税额账务处理
  • 建筑工程机械服务有限公司企业
  • 代购货物的缴税情况
  • 建筑企业小型企业有哪些
  • 事业单位结转结余科目
  • 开发成本月末如何处理
  • 接受股权转让要交什么税
  • 收到货款确认收入但是后期开票了怎么做分录
  • 餐费开专票有什么影响
  • 无形资产转让计入什么科目
  • 股东借款利息代扣代缴增值税是怎样算的?
  • 房地产不可销售的物业有哪些
  • 员工疗养要扣公休假吗
  • 航天信息服务费的会计分录
  • 会计学堂值得购买吗
  • 应交增值税进项税额借贷方向
  • 投资性房地产属于流动资产吗
  • 质量扣款入什么科目
  • 个体工商户起征点10万执行时间
  • 怎样查一个银行的行号
  • 经济作物国家有什么补助吗
  • 本地磁盘c满了怎么清理
  • 电脑管家使用教程
  • 苹果推送ios15
  • 固定资产内部抵消
  • vue.js前端
  • session.php
  • framework教程
  • php教程全集
  • 小规模纳税人会计分录
  • 外经证核销期限是多久
  • 无形资产摊销怎么算月摊销额
  • 保姆级教程什么意思
  • 开源cti
  • 车船税怎么计算
  • ps抠图怎样
  • 发票记账联可以给客户吗
  • phpcms文档
  • 帝国cms8.0
  • 记 vue-cli-plugin-dll 使用,优化vue-cli项目构建打包速度
  • pandas columns排序
  • 一般纳税人超过多少要交税
  • 社保怎么缴费方式
  • 长期股权投资收益要交企业所得税吗
  • 长期待摊费用借方负数什么意思
  • 个税汇算要清缴么
  • 固定资产增加
  • 消防设施安装费收费标准
  • 国有资产保值增值率
  • 车辆购置税如何计算器
  • 自建不动产领用原材料增值税进项
  • 走逃发票账务处理
  • 村集体经济组织的银行存款可以向外单位或个人出租出借
  • 政府补助计入资本公积吗
  • 施工单位食堂管理要求
  • 错误凭证如何处理
  • 上年度多计提的附加税怎么办
  • Centos7.3下mysql5.7.18安装并修改初始密码的方法
  • mysql 大数据处理
  • 解决Windows Server远程断开后自动
  • centos6.5修改用户名
  • ubuntu16.04远程连接
  • mac自带功能流程图
  • f_00000e是什么文件
  • w8系统怎么连接投影仪
  • win8 任务栏
  • win10 20h2 微软账户
  • win10鼠标移动速度怎么设置
  • alt用不了
  • node.js web
  • 简单强悍是哪首歌
  • 适合当前端的手机
  • jquery获取滚动条位置
  • unity 优化
  • 在centos上安装pycharm
  • python怎么编函数
  • 审计会计税务的区别及联系
  • 我们如何理解税收意义
  • 安徽省纪检监察官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设