Yasin

Yasin

柯里化

柯里化,英语:Currying,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

可以从“拆参数、延迟执行、复用逻辑”这三个点理解柯里化(Currying)。

为什么需要柯里化

  1. 提高复用性
    把多参数函数拆成一层层单参数函数后,可以先“固定一部分参数”,生成更专用的函数。
    例如先固定税率、先固定日志前缀。

  2. 延迟执行(惰性)
    先接收部分参数,等上下文齐了再执行,适合配置先行的场景。

  3. 让函数组合更自然
    在函数式编程里,单参数函数更容易 compose/pipe/map/filter

  4. 减少重复传参
    避免每次都传相同参数,代码更简洁。


常见使用场景

  • 配置型 API:先传配置,再传数据
    withRetry(options)(request)
  • 事件处理/中间件:先传上下文,再传事件
    handleClick(userId)(event)
  • 表单校验/规则引擎:先传规则,再传输入值
    minLength(8)(password)
  • 函数式数据处理:配合 map/filter/reduce 做可组合逻辑
  • 日志/埋点/权限检查:先固定模块信息,再处理具体动作

现代编程中用得多吗?

  • 中等偏少(业务代码):日常 CRUD/页面开发里不会高频手写完整柯里化。
  • 中等偏多(工具层/函数式风格):在工具函数库、状态管理、中间件、函数组合场景仍很常见。
  • React/Vue 项目里:常见的是“局部柯里化思想”(如先传参数返回事件处理函数),而不是到处写纯 FP 风格代码。

一句话:柯里化不是“必须”,但在“参数复用 + 组合 + 延迟执行”这三类问题上非常有价值。