初学者在功能性JavaScript中的咖喱指南
咖喱或部分应用是一种功能性技术之一,它听起来与熟悉传统写作JavaScript方式的人们感到困惑。但是,如果适当地应用,它实际上可以使您的功能性JavaScript更具可读性。
>钥匙要点
- 咖喱是一种功能编程技术,允许部分应用函数的参数,这意味着您可以通过函数期望的所有参数或一个子集。如果传递子集,则返回一个函数,以等待其余参数。
> 咖喱可以使JavaScript代码更具可读性和灵活性。它允许创建一个小型,易于配置的功能的库,这些功能始终如一,可以迅速使用,并且可以在阅读代码时可以理解。 - > >咖喱时的参数顺序很重要。最有可能从一个变体替换为另一种变体的参数应该是传递给原始函数的最后一个参数。 >一些功能性的JavaScript库,例如RAMDA,提供了灵活的咖喱功能,可以打破功能所需的参数,并允许您单独或分组将它们传递以创建自定义咖喱变化。如果您打算广泛使用咖喱,建议使用此类库。
- >
- 更可读性,更灵活
>
>如果您以前遇到过这个术语,但从来不知道它的含义,那么您可以将其视为一些异国情调,辛辣的技巧,而您无需打扰。但是咖喱实际上是一个非常简单的概念,它在处理函数参数时解决了一些熟悉的问题,同时为开发人员打开了一系列灵活的选项。>
什么是咖喱?简而言之,咖喱是构建允许部分应用函数参数的函数的方式。这意味着您可以通过函数期望并获得结果的所有参数,或者传递这些参数的子集,并获得等待其余参数的函数。真的很简单。
咖喱是围绕功能概念构建的Haskell和Scala等语言中的元素。 JavaScript具有功能功能,但默认情况下并没有内置咖喱(至少在当前版本中不在语言中)。但是我们已经知道一些功能的技巧,我们也可以在JavaScript中为我们做咖喱。
>让您了解它的工作方式,让我们在JavaScript中创建第一个咖喱功能,使用熟悉的语法来构建我们想要的咖喱功能。例如,让我们想象一个用名字打招呼的功能。我们都知道如何创建一个以名称和问候的简单问候功能,并将其名称登录到控制台::
var greet = function(greeting, name) { console.log(greeting + ", " + name); }; greet("Hello", "Heidi"); //"Hello, Heidi"
我们的第一个咖喱
var greetCurried = function(greeting) { return function(name) { console.log(greeting + ", " + name); }; };
>我们还可以通过在单独的括号中传递每个参数直接调用原始咖喱函数,一个接一个:
var greetHello = greetCurried("Hello"); greetHello("Heidi"); //"Hello, Heidi" greetHello("Eddie"); //"Hello, Eddie"
为什么不在浏览器中尝试一下?
greetCurried("Hi there")("Howard"); //"Hi there, Howard"
>
>很酷的事情是,现在我们已经学会了如何修改传统功能以使用这种方法来处理论点,我们可以用我们想要的尽可能多的参数来做到这一点:>我们具有与两个参数相同的灵活性。无论嵌套走了多远,我们都可以创建新的自定义功能来打招呼,以尽可能多地选择适合我们的目的的人:
:var greetDeeplyCurried = function(greeting) { return function(separator) { return function(emphasis) { return function(name) { console.log(greeting + separator + name + emphasis); }; }; }; };
更重要的是,我们可以在创建原始咖喱函数的自定义变化时,尽可能多地传递参数,创建能够采用适当数量的其他参数的新功能,每个函数以其自己的括号集分别传递:
var greetAwkwardly = greetDeeplyCurried("Hello")("...")("?"); greetAwkwardly("Heidi"); //"Hello...Heidi?" greetAwkwardly("Eddie"); //"Hello...Eddie?"
我们可以轻松地定义下属变化:
var sayHello = greetDeeplyCurried("Hello")(", "); sayHello(".")("Heidi"); //"Hello, Heidi." sayHello(".")("Eddie"); //"Hello, Eddie."
>您可以看到这种方法的功能,特别是如果您需要创建许多非常详细的自定义功能。唯一的问题是语法。当您构建这些咖喱功能时,您需要保持嵌套返回的功能,并使用需要多组括号的新功能调用它们,每个功能都包含其自己的孤立参数。它可能会变得凌乱。
var askHello = sayHello("?"); askHello("Heidi"); //"Hello, Heidi?" askHello("Eddie"); //"Hello, Eddie?"
var greet = function(greeting, name) { console.log(greeting + ", " + name); }; greet("Hello", "Heidi"); //"Hello, Heidi"
>
var greetCurried = function(greeting) { return function(name) { console.log(greeting + ", " + name); }; };
var greetHello = greetCurried("Hello"); greetHello("Heidi"); //"Hello, Heidi" greetHello("Eddie"); //"Hello, Eddie"
>我们的小咖喱功能可能无法处理所有边缘案例,例如缺失或可选参数,但是只要我们严格对通过参数的语法保持严格,它就可以做一个合理的工作。
> RAMDA等一些功能性JavaScript库具有更灵活的咖喱功能,可以打破功能所需的参数,并允许您单独或分组通过它们来创建自定义咖喱变化。如果您想广泛使用咖喱,这可能是要走的方法。
> 无论您选择如何在编程中添加咖喱更可读。函数的每个派生变化都应具有一个名称,以表明其行为的行为以及其期望的参数。
>参数顺序
>咖喱时要牢记的一件事是论点的顺序。使用我们描述的方法,您显然希望您最有可能从一个变体替换为下一个变体,以作为传递给原始函数的最后一个参数。
提前思考论证顺序将使计划更容易计划咖喱,并将其应用于您的工作。考虑到最可能改变的论点的顺序,在设计功能时,无论如何都不是一个坏习惯。
结论
咖喱是功能性JavaScript的一种非常有用的技术。它允许您生成一个始终如一,迅速使用的小型,易于配置的功能的库,并且在阅读代码时可以理解。将咖喱添加到您的编码实践中将鼓励在整个代码中使用部分应用功能,避免大量潜在的重复,并可能帮助您更好地养成命名和处理功能参数的习惯。
>如果您喜欢的话,这篇文章,您可能还喜欢该系列的其他一些:
>- 功能性JavaScript简介 JavaScript中的高阶函数
- > 在功能JavaScript中的递归
> JavaScript中的咖喱和部分应用之间的主要区别是什么?但是,它们的实施和使用情况有所不同。咖喱是功能编程中的一个过程,其中具有多个参数的函数被转换为一个函数序列,每个函数都带有一个参数。另一方面,部分应用程序是指将许多参数固定到函数的过程,从而产生另一个较小的ARITY函数。咖喱始终产生嵌套的一元(1个动力)功能,而部分应用可以产生任何ARITY的功能。
>>如何在Javascript中增强代码可读性和可维护性? JavaScript中的可读性和可维护性。通过将复杂的功能分解为更简单的一单元功能,咖喱使代码更可读和易于理解。当每个功能执行一个任务时,它还可以促进清洁剂和更模块化的代码。这种模块化使代码更易于维护和调试,因为可以将问题隔离到特定功能。
您可以提供JavaScript中咖喱的示例吗?添加三个数字的函数。如果不咖喱,该函数可能看起来像这样:函数add(a,b,c){>返回a b c; }
console.log(add(1,2,3) ); //输出:6>在咖喱的情况下,相同的函数将写为:函数add(a){
return function(b){
return> return函数(c ){
返回a b c;
}
}
}
}
console.log(add(add(1)(2)(3)); //输出:6
>在JavaScript中使用咖喱的局限性或缺点是什么?主要缺点之一是,对于那些不熟悉该概念的人来说,它可以使代码更难理解,尤其是在处理大量参数的功能时。由于创建了额外的封闭,它也可能导致性能开销。此外,它可以使函数调用更多详细,因为每个参数必须在一组单独的括号中传递。
咖喱与JavaScript中的高阶功能有何关系?与JavaScript中高阶功能的概念有关。高阶函数是一个或多个函数作为参数,返回函数作为其结果或两者兼而有之的函数。由于咖喱涉及将函数转换为一系列函数调用,因此它固有地涉及使用高阶函数。
>
>可以在JavaScript?
中与箭头函数一起使用,是的,可以在JavaScript中与箭头函数一起使用咖喱。实际上,箭头函数的语法使它们特别适合咖喱。以下是可以使用箭头函数编写上一个添加函数的方式:
const add = a => b => c => a b c;
>
>所有JavaScript函数都可以咖喱吗?在理论上,任何JavaScript,任何JavaScript可以使用两个或多个参数的功能。但是,在实践中,咖喱功能可能并不总是实用或有益的。例如,咖喱对于需要在不同时间使用不同数量的参数调用的函数可能没有用。>咖喱如何影响JavaScript代码的性能?您的代码更可读性和模块化,也可能对性能产生略有影响。这是因为每次您咖喱功能时,都会创建新的关闭。但是,在大多数情况下,对绩效的影响可以忽略不计,并且超过了改进的代码可读性和可维护性的好处。
以上是初学者在功能性JavaScript中的咖喱指南的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

zustand异步操作中的数据更新问题在使用zustand状态管理库时,经常会遇到异步操作导致数据更新不及时的问题。�...
