likes
comments
collection
share

高级函数:探索Javascript中的柯里化(译)

作者站长头像
站长
· 阅读数 54

初见

目的:一边学技术一边学英文。😋

小编翻译过程可能不会按原文一句一字翻译,稍微会插入一些自己的理解与补充,但是原文本意不会改变,如有错误之处,欢迎指出,也望海涵。

原文链接 👈👈👈

遵纪守法,科学上网。🪜🪜🪜

相识

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)。
  • 它返回一个接收姓名字符串的函数。
  • 返回的函数通过组合称呼和姓名来构造问候语。
  • 我们使用不同的称呼创建了两个单独的函数 sayHellosayHi

确实是一个很不错的示例,通俗易懂,瞬间就明白柯里化的大概了。😮

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 语句根据提供的操作对字符串执行指定的操作。
  • 我们使用柯里化的部分函数为特定操作(如toUppertoLowertrimString)创建单独的函数。

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
评论
请登录