iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用JS函数式编程实现XDM
  • 533
分享到

怎么使用JS函数式编程实现XDM

2023-07-02 09:07:17 533人浏览 泡泡鱼
摘要

这篇文章主要讲解了“怎么使用js函数式编程实现XDM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS函数式编程实现XDM”吧!FP 概览重要性函数式编程(FP),不是一个新的概念,

这篇文章主要讲解了“怎么使用js函数式编程实现XDM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS函数式编程实现XDM”吧!

FP 概览

重要性

函数式编程(FP),不是一个新的概念,它几乎贯穿了整个编程史。直到最近几年,函数式编程才成为整个开发界的主流观念。

函数式编程有完善且清晰的原则,一旦我们知道这些原则,我们将能更加快速地读懂代码,定位问题。这是为什么函数式编程重要的原因!

比如:你可能写过一些命令式的代码,像 if 语句和 for 循环这样的语句。这些语句旨在精确地指导计算机如何完成一件事情。而声明式代码,以及我们努力遵循函数式编程原则所写出的代码,更专注于描述最终的结果。

函数式编程以另一种方式来思考代码应该如何组织才能使数据流更加明显,并能让读者很快理解你的思想。

记住,你编写的每一行代码之后都要有人来维护,这个人可能是你的团队成员,也可能是未来的你。

最初的函数

函数式编程不是仅仅用 function 这个关键词来编程,就像面向对象编程不仅仅是用了对象就算是。

函数的真正意义是什么?

回到最初的起点,我们心中的函数一定是这样的:

怎么使用JS函数式编程实现XDM

f(x) = 2x2 + 3,这是数学上真正的函数。那这和函数式编程有什么关系呢?

函数的本质是【映射】。以一个优雅的方式来描述一组值和另一组值的映射关系,即函数的输入值与输出值之间的关联关系。

在编程中,它或许有许多个输入值,或许没有。它或许有一个输出值( return 值),或许没有。

如果你计划使用函数式编程,你应该尽可能多地使用函数,而不是程序。你所有编写的 function 应该接收输入值,并且返回输出值。(这么做的原因是多方面的,后续会一一介绍)

这里,输入值就是函数传参,输出值就是return的东西。(如果你没有 return 值,或者你使用 return;,那么则会隐式地返回 undefined 值。)

思考“return”

  • 思考以下代码:

function foo(x) {    if (x > 10) return x + 1;    var y = x / 2;    if (y > 3) {        if (x % 2 == 0) return x;    }    if (y > 1) return y;    return x;}

foo(2) 返回什么? foo(4) 返回什么? foo(8), foo(12) 呢?

  • 将上述代码变形,请思考:

function foo(x) {    var retValue;    if (retValue == undefined && x > 10) {        retValue = x + 1;    }    var y = x / 2;    if (y > 3) {        if (retValue == undefined && x % 2 == 0) {            retValue = x;        }    }    if (retValue == undefined && y > 1) {        retValue = y;    }    if (retValue == undefined) {        retValue = x;    }    return retValue;}

这样写会更容易理解吗?

在每个 retValue 可以被设置的分支, 这里都有个守护者以确保 retValue 没有被设置过才执行。(?)

相比在函数中提早使用 return,我们更应该用常用的流控制( if 逻辑 )来控制 retValue 的赋值。到最后,我们 return retValue。

用 return 来实现流控制,会创造更多的隐含意义。

再来思考以下代码:

// 通过一个函数修改变量 y 的值var y;function foo(x) {    y = (2 * Math.pow( x, 2 )) + 3;}foo( 2 );y;

但是我们也可以这样写:

function foo(x) {    return (2 * Math.pow( x, 2 )) + 3;}var y = foo( 2 );y;

后一个版本更有优势吗?

答案是肯定的:有!

后一个版本中的 return 表示一个显式输出,而前者的 y 赋值是一个隐式输出。

通常,开发人员喜欢显式模式而不是隐式模式。

为什么说后者 return 出来的就是显式的?而前者的 y 赋值是隐式的?

这个例子可以给你答案:

function sum(list) {    var total = 0;    for (let i = 0; i < list.length; i++) {        if (!list[i]) list[i] = 0; // list 使用了 nums 的引用,不是对 [1,3,9,..] 的值复制,而是引用复制。        total = total + list[i];    }    return total;}var nums = [ 1, 3, 9, 27, , 84 ];sum( nums );            // 124

这段代码,除了 return 的输出,还有没有其它输出可能改变到函数外部参数 nums 的值?

是有的!就是在注释的一行,我们无意中改变了 nums 。

console.log(nums) // [1, 3, 9, 27, 0, 84]

JS 对数组、对象和函数都使用引用和引用复制,我们可以很容易地从函数中创建输出,即使是无心的。

这个隐式函数输出在函数式编程中有一个特殊的名称:副作用。

没有副作用的函数也有一个特殊的名称:纯函数,这个概念十分重要,后面对有更多讨论!

高阶函数

一个函数如果可以接受或返回一个甚至多个函数,它被叫做高阶函数。

其中最强大的就是:【闭包】。

我们将在的后续举例中大量使用闭包。它可能是所有函数式编程中最重要的基础。

此处举一小例:

假设你需要将两个值相加,一个你已经知道,另一个还需要后面才能知道,你可以使用闭包来记录第一个输入值:

function makeAdder(x) {    return function sum(y){        return x + y;    };}//我们已经分别知道作为第一个输入的 10 和 37var addTo10 = makeAdder( 10 );var addTo37 = makeAdder( 37 );// 紧接着,我们指定第二个参数addTo10( 3 );            // 13addTo10( 90 );            // 100addTo37( 13 );            // 50

这种在连续函数调用中指定输入,是函数式编程中非常普遍的形式。

它可分为两类:偏函数应用和柯里化。后续会展开。

具名函数

我们提倡要用具名函数,而不是匿名函数,这更有利于我们语义化代码,比如getPreferredName(..),操作意图很明确,并且可以很好的回溯问题,防止出现 (anonymous function) 。

但是 => 箭头函数除外,箭头函数还是得有效利用。

=> 箭头函数令人兴奋的地方在于它几乎完全遵循函数的数学符号,特别是像 Haskell 这样的函数式编程语言。它能简化、优化代码片段中的空间。

丢掉“this"

javascript 中的 this 绑定规则是真的难记,好消息是我们将把 this 丢弃掉,不去理会它。

这样做的内核原因是:this 是函数的一个隐式的输入参数。前面我们提到通常,开发人员喜欢显式模式而不是隐式模式。,这样的隐式输入违背了我们的原则。

感谢各位的阅读,以上就是“怎么使用JS函数式编程实现XDM”的内容了,经过本文的学习后,相信大家对怎么使用JS函数式编程实现XDM这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么使用JS函数式编程实现XDM

本文链接: https://www.lsjlt.com/news/340918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用JS函数式编程实现XDM
    这篇文章主要讲解了“怎么使用JS函数式编程实现XDM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS函数式编程实现XDM”吧!FP 概览重要性函数式编程(FP),不是一个新的概念,...
    99+
    2023-07-02
  • JS轻量级函数式编程实现XDM二
    目录前言偏函数传参现状封装 partial运行机制拓展 partial柯里化阶段小结前言 承接上一篇《XDM,JS如何函数式编程?看这就够了!(一)》,我们知道了函数式编程的几个基本...
    99+
    2024-04-02
  • JS轻量级函数式编程实现XDM一
    前言 盲猜一个:如果你有看过 《medium 五万赞好文-《我永远不懂 JS 闭包》》 《“类”设计模式和“原型”设计模式&mdash...
    99+
    2024-04-02
  • JS轻量级函数式编程实现XDM三
    目录前言组合函数含义封装盒子任意组合compose 变体抽象能力阶段小结前言 这是【JS如何函数式编程】系列文章第三篇。点赞关注,持续追踪 前两篇传送门: 《XDM,JS如何函数式编...
    99+
    2024-04-02
  • 用JavaScript实现函数式编程
    这篇文章主要讲解了“用JavaScript实现函数式编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用JavaScript实现函数式编程”吧!函数式编程语...
    99+
    2024-04-02
  • 如何使用JS函数式编程Reduce与Map
    本篇内容主要讲解“如何使用JS函数式编程Reduce与Map”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用JS函数式编程Reduce与Map”吧!Jav...
    99+
    2024-04-02
  • Java中怎么实现Lambda函数式编程
    Java中怎么实现Lambda函数式编程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。背景java 8 Lambda函数式编程,像阿里、腾讯这样的大互联网公司早就已经使用的技术...
    99+
    2023-06-17
  • 怎么在Java中实现函数式编程
    本篇文章为大家展示了怎么在Java中实现函数式编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了...
    99+
    2023-06-14
  • Java 8中怎么实现函数式编程
    这期内容当中小编将会给大家带来有关Java 8中怎么实现函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我被 Stack Overflow 上网友“mip”提的一个有趣的问题给难住了。该问题是:1...
    99+
    2023-06-17
  • Python中怎么利用toolz库实现函数式编程
    本篇文章给大家分享的是有关Python中怎么利用toolz库实现函数式编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用 toolz 库来构建。 这个库具有操作此类函数的函...
    99+
    2023-06-17
  • Java中的函数式编程怎么使用
    本文小编为大家详细介绍“Java中的函数式编程怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的函数式编程怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概述背景函数式编程的理论基础是阿隆...
    99+
    2023-07-05
  • Java中怎么实现数据流和函数式编程
    本篇文章为大家展示了Java中怎么实现数据流和函数式编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基础特性流 API 是在数据序列中迭代元素的简洁而高级的方法。包 java.util.strea...
    99+
    2023-06-16
  • 如何使用 STL 函数对象来实现函数式编程风格?
    stl 函数对象支持 c++++ 中函数式编程:通过实现 operator() 运算符定义函数对象,以指定行为;可用于映射、过滤和排序操作,提高可重用性、可读性和性能。 如何使用 ST...
    99+
    2024-04-25
    函数式编程 stl 函数对象 c++ 代码可读性
  • JavaScript函数式编程实现介绍
    目录为什么要学习函数式编程什么是函数式编程前置知识函数是一等公民函数可以储存在变量中函数作为参数函数作为返回值高阶函数什么是高阶函数使用高阶函数的意义常用高阶函数闭包纯函数纯函数概念...
    99+
    2024-04-02
  • 怎么用JS: 函数式array.forEach
    本篇文章给大家分享的是有关怎么用JS: 函数式array.forEach,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。array.forEac...
    99+
    2024-04-02
  • Java函数式编程怎么应用
    今天小编给大家分享一下Java函数式编程怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java 根据常用需求场景的用...
    99+
    2023-07-04
  • js函数式编程中的高阶函数有哪些
    小编给大家分享一下js函数式编程中的高阶函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!函数式编程-->高阶函数缺点,不能进行流程控制mapcons...
    99+
    2023-06-17
  • JS防抖节流函数的实现与使用方式
    本篇内容介绍了“JS防抖节流函数的实现与使用方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一、什么是函数防抖为什么需要函数防抖?函数...
    99+
    2023-06-20
  • js中函数式编程的示例分析
    这篇文章主要为大家展示了“js中函数式编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中函数式编程的示例分析”这篇文章吧。(1)平常写的函数大多...
    99+
    2024-04-02
  • 怎么使用JS console.log函数
    这篇文章主要讲解了“怎么使用JS console.log函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS console.log函数”吧!1....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作