柯里化使通用排序函数解耦“按什么排”与“排哪些数据”,支持预设单字段排序器(如byAge)、多级排序(如sortBy('dept')('salary','desc'))及声明式链式调用,提升复用性、可维护性与类型安全。

柯里化能让通用排序函数摆脱每次重复写比较逻辑的麻烦,把“按什么排”和“排哪些数据”分开处理,让调用更干净、复用更直接。
把排序逻辑拆成可预设的排序器
原生 sort() 需要每次都传一个比较函数,比如按数字升序、字符串长度、对象某个字段——这些其实都是固定模式。柯里化后,你可以先定义好“怎么比”,再随时传入待排序数组:
- 写一个通用比较函数:compareBy(prop, order = 'asc'),它接收字段名和方向,返回真正的比较函数
- 用柯里化把它变成可复用的工厂:比如 byAge = compareBy('age')、byNameDesc = compareBy('name', 'desc')
- 后续只需 data.sort(byAge) 或 list.sort(byNameDesc),不用再拼匿名函数
支持多级排序的参数累积
真实场景常需“先按部门升序,再按薪资降序”。柯里化天然适合这种分步配置:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 设计支持链式传参的柯里化排序器,例如 multiSort(key1, dir1)(key2, dir2)
- 每级参数都闭包保存,最终生成一个能处理多条件的比较函数
- 调用时可写成 users.sort(sortBy('dept')('salary', 'desc')),清晰表达优先级
配合数组方法实现声明式调用
柯里化后的排序器可以直接用于 map、filter 后的链式操作,避免中间变量:
立即学习“Java免费学习笔记(深入)”;
- fetchUsers().then(users => users.sort(byStatus).filter(activeOnly))
- 甚至封装成更语义化的函数:sortByStatus = curry(sort).by('status'),调用即见意图
- 不需要修改原始数组也能复用:比如 [...data].sort(byPrice)
避免硬编码,统一管理排序规则
项目中多个地方按相同字段排序时,柯里化能集中维护逻辑:
- 把所有常用排序器导出为模块:export const byDate = compareBy('createdAt', 'desc')
- 组件里直接导入使用,改一处,全局生效
- 配合 TypeScript 类型推导,字段名还能获得编辑器提示和类型检查

















