高级函数:探索Javascript中的柯里化(译)
初见
目的:一边学技术一边学英文。😋
小编翻译过程可能不会按原文一句一字翻译,稍微会插入一些自己的理解与补充,但是原文本意不会改变,如有错误之处,欢迎指出,也望海涵。
原文链接 👈👈👈
遵纪守法,科学上网。🪜🪜🪜
相识
在 Javascript
中,柯里化是一种高级的函数式编程技术,它能将具有多个参数的函数转换成一系列函数,每个函数一次仅接收一个参数。
过程
具有多个参数的函数:可以想象一个将三个数字相加的函数。
function add(a, b, c) {
return a + b + c;
}
将其转换成一系列函数:柯里化将此函数分解为更小的函数,其中每个函数接收一个参数并返回一个等待其余参数的新函数。
一分部应用:你可以一次使用一个参数调用柯里化函数,它会记住提供的参数,直到提供所有参数为止。
😐Em....大概是说了一下柯里化的详细过程、作用吧,应该是这么一个意思。
好处
提供代码的复用性:通过创建较小的函数,你可以在不同的上下文中复用它们。
增强代码的可组合性:柯里化函数可以轻松组合以创建更复杂的功能。
提供代码的灵活性:你可以预先提供部分参数,在后续需要用到地方再去调用、构建函数。
示例
以下是在 Javascript
中,使用字符串进行柯里化的一些代码示例。
1. 问候语
创建一个用于构建问候语的柯里化函数:
function greet(salutation) {
return function(name) {
return `${salutation}, ${name}!`;
};
}
const sayHello = greet("Hello");
const sayHi = greet("Hi");
console.log(sayHello("Alice")); // Hello, Alice!
console.log(sayHi("Bob")); // Hi, Bob!
说明:
- 我们定义了一个函数(
greet
),它接收一个称呼字符串(salutation
)。 - 它返回一个接收姓名字符串的函数。
- 返回的函数通过组合称呼和姓名来构造问候语。
- 我们使用不同的称呼创建了两个单独的函数
sayHello
与sayHi
。
确实是一个很不错的示例,通俗易懂,瞬间就明白柯里化的大概了。😮
2. 字符串操作
一个字符串操作的柯里化函数:
function modifyString(action) {
return function(str) {
switch (action) {
case "uppercase":
return str.toUpperCase();
case "lowercase":
return str.toLowerCase();
case "trim":
return str.trim();
default:
return str;
}
};
}
const toUpper = modifyString("uppercase");
const toLower = modifyString("lowercase");
const trimString = modifyString("trim");
console.log(toUpper("hello world")); // HELLO WORLD
console.log(toLower("HI THERE")); // hi there
console.log(trimString(" spaces around ")); // spaces around
说明:
- 我们定义了一个函数(
modifyString
),它接收一个动作字符串(action
)。 - 它返回一个接收字符串(
str
)的函数。 - 内部函数使用
switch
语句根据提供的操作对字符串执行指定的操作。 - 我们使用柯里化的部分函数为特定操作(如
toUpper
、toLower
、trimString
)创建单独的函数。
3. 字符串格式
创建一个可重用的字符串格式化函数,用以表达柯里化:
function formatString(prefix, suffix) {
return function(str) {
return `${prefix}${str}${suffix}`;
};
}
const announcement = formatString("[ Announcement]: ", "!");
console.log(announcement("JavaScript is awesome")); // [ Announcement]: JavaScript is awesome!
说明:
- 我们定义了一个函数(
formatString
),它接收一个前缀字符串(prefix
)和一个后缀字符串(suffix
)。 - 它返回一个字符串(
str
)的函数。 - 返回的函数组合前缀、字符串和字符串后缀以创建格式化输出。
- 我们使用具有特定公告前缀和后缀的部分应用程序创建函数公告。
- 这些示例演示了柯里化如何允许你为
Javascript
中的各种字符串操作和格式化任务创建可重用的函数。
告别
虽然柯里化并不适用所有情况,但它为函数式程序员和那些寻求编写更简洁、更易于维护的 Javascript
代码的人提供一个有价值的方式。这是一项值得探索的技术,可以增强你的函数式编程技能,并有可能改善 Javascript
项目的结构和可读性。😗
🙌如有翻译偏差之处,欢迎评论区指出批评,拜谢🙌
God bless and happy coding!🍊
转载自:https://juejin.cn/post/7353060906697326627