写点什么

推荐一本新书《Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner》

用户头像
顿晓
关注
发布于: 2021 年 04 月 10 日
推荐一本新书《Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner》

这本书名字起的很好,大部分人一下就能被吸引住。比起其前任《Structure and Interpretation of Computer Programs》就很亲民,也很贴近当下大家都会面临对问题:灵活性。


去年精读了《Composing Software An Exploration of Functional Programming and Object Composition in JavaScript》之后,还存在的一些疑虑在这本书中找到了解答。


比如 Function combinators 函数组合,大家都知道最简单的组合方式如下:

const compose = (f, g) => (x) => f(g(x))
复制代码


然后就会遇到不适合上述最简单方式的情况,如 f g 只能接收一个参数吗?g 返回多余一个参数呢?

在该书中就补上了这些情况,也让原本以为无解的情况,给出了 Flexibility 的解。


如,还定义了 parallel-combine 的情况:

const parallel_combine = (h, f, g) => (x) => h(f(x), g(x))
复制代码


还有能接收多个参数的 spread-combine

const spread_combine = (h, f, g) => (...args) => h(f(...args[0..n]), g(...args[n..]))
复制代码


以及更常见的参数个数多了 discard-argument、少了 curry-argument 和参数顺序不对 permute-arguments

const discard_argument = (f, n) =>  (...args) => f(...args.filter((_, index) => index !== n))
const curry_argument = (f, n, ...args) => (x) => f(...args[0..n], x, ...args[n..])
const permute_argument = (f, ...indexs) => (...args) => f(...indexs.map((_, index) => args[index]))
复制代码


发布于: 2021 年 04 月 10 日阅读数: 61
用户头像

顿晓

关注

因观黑白愕然悟,顿晓三百六十路。 2017.10.17 加入

视频号「编程日课」 知识星球「俺的死党顶」

评论

发布
暂无评论
推荐一本新书《Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner》