| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 如何使用纯函数包装器编写灵活的 JavaScript 代码 -> 正文阅读 |
|
[JavaScript知识库]如何使用纯函数包装器编写灵活的 JavaScript 代码 |
使用高阶函数 (HOF) 可以编写更具声明性、灵活性和紧凑性的代码。 软件开发的一项规则是不要接触任何工作正常的东西。如果您要增强已经存在的功能,您应该设计一个包装类。但请注意,创建这样的类会带来新问题,例如不灵活、副作用甚至约束。 您应该考虑编写适当的函数式包装函数以获得一个干净的包装函数,以获得更高的代码灵活性和更好的测试能力。 一些包装用例包装一个函数意味着保持原始函数不变。已经给出的代码可能会影响其他对象,如果你改变它,你可能会产生连锁反应。— 您也可以说包装器是装饰器。 以下是一些用例:
经典实现——记录器您可能已经多次遇到过这个用例,是的,您可以使用断点来代替日志记录。但这是关于更深入的理解,因此您可以采用该技术。 如果不使用包装器,则必须修改函数的代码——进入和退出以产生一些日志输出。 这可能是您的原始代码: 更进一步而不换行意味着您必须添加一个 如果函数有多个 所以一定有更好的方法,也有一种不容易发生意外和违反规则的技术: 如果它有效……不要碰它。 函数式实现——记录器首先,您有一个确实实现了特定功能的函数,并且您想知道它的 I/O — 传入的参数和传出的参数。 编写一个具有单个参数的高阶函数——原始函数——并返回一个新函数,该函数将按顺序执行以下操作:
实现这个过程,你会想出这个可能的代码作为解决方案: by 返回的函数
显示的方法适用于您的大多数功能。一个你可能已经想到的问题: 抛出异常的函数能否为这种明亮的包装技术带来黑暗? 异常要检查这种情况,我们应该稍微增强您的日志记录功能。当您的原始函数抛出异常时, 无论您的包装函数是否抛出错误,此更改都会生成适当的日志记录语句。每次您都会收到一条消息,通知您一切正常或错误。除此之外,错误被重新抛出以进行处理。 提示:为了获得更好的日志输出,您可以添加日期和时间。增强参数的列出方式,等等。 尽管如此,这个实现仍然不完美。它有一个重要的缺陷。 创建一个纯包装器提到纯函数意味着与没有副作用齐头并进。 使用像这样的固定语句会使您失去灵活性——您无法选择其他形式的日志记录——并使测试变得更加复杂。 你打算如何测试它?窥探 这也不是很干净。了解特定函数的内部行为的依赖性对于测试它是必不可少的。事实并非如此。你想设计你的测试。你想要的是黑盒测试。 检查以下测试: 此测试将向您显示 虽然它没有解决缺乏灵活性的问题,但您应该将日志记录函数作为参数传递给包装函数。导致按需更改 如果您不传递任何内容,默认包装器将产生与 像这样编写函数,我们可以利用存根。测试代码与之前几乎相同,但是由于您可以使用存根—— 在这种情况下,最初调用的真实函数 新测试的工作方式与前一个相同,但使用并检查 此外,它避免了由于副作用而导致的所有可能的问题,因此它更清洁,更安全。 结论我想提一下,当你使用函数式技术时,永远记住,如果你让自己的工作复杂化,那么你一定是做错了。 函数 您可能会争辩说,代码的简单性可能不足以决定它是否值得修复。您甚至可以在没有测试的情况下完成,并且您不需要能够更改日志生成的方式。但迟早,你会后悔做出这样的决定。 您应该始终尝试使用更清洁的解决方案。 因为通过添加包装类并使用您希望使用的任何记录器,这种方式为您带来了高度的灵活性 - 记录器代表您想要的任何所需更改。 此外,您现在已经完成了对任何所需实现的测试。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:31:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |