全本 | iKcamp翻译 | 《JavaScript 轻量级函数式编程》|《你不知道的JS》姊妹篇

  • 原文地址:Functional-Light-JS
  • 原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者

译者团队(排名不分先后):阿希、blueken、brucecham、cfanlife、dail、kyoko-df、l3ve、lilins、LittlePineapple、MatildaJin、冬青、pobusama、Cherry、萝卜、vavd317、vivaxy、萌萌、zhouyao

关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;分享,是 CSS 里最闪耀的一瞥;总结,是 JavaScript 中最严谨的逻辑。经过捶打磨练,成就了本书的中文版。本书包含了函数式编程之精髓,希望可以帮助大家在学习函数式编程的道路上走的更顺畅。比心。

本书主要探索函数式编程[1](FP)的核心思想。在此过程中,作者不会执着于使用大量复杂的概念来进行诠释,这也是本书的特别之处。我们在 JavaScript 中应用的仅仅是一套基本的函数式编程概念的子集。我称之为“轻量级函数式编程(FLP)”。

注释: 题目中使用了“轻量”二字,然而这并不是一本“轻松的”“入门级”书籍。本书是严谨的,充斥着各种复杂的细节,适合拥有扎实 JS 知识基础的阅读者进行研读。“轻量”意味着范围缩小。通常来说,关于函数式编程的 JavaScript 书籍都热衷于拓展阅读者的知识面,并企图覆盖更多的知识点。而本书则对于每一个话题都进行了深入的探究,尽管这种探究是小范围进行的。

让我们面对这个事实:除非你已经是函数式编程高手中的一员(至少我不是!),否则类似“一个单子仅仅是自函子中的幺半群”这类说法对我们来说毫无意义。

这并不是说,各种复杂繁琐的概念是无意义的,更不是说,函数式编程者滥用了它们。一旦你完全掌握了轻量的函数式编程内容,你将会/但愿会想要对函数式编程的各种概念进行更正式更系统的学习,并且你一定会对它们的意义和原因有更深入的理解。

但是我更想要让你能够现在就把一些函数式编程的基础运用到 JavaScript 编程过程中去,因为我相信这会帮助你写出更优秀的,更符合逻辑的代码。

更多关于本书背后的动机和各种观点讨论,请参看[前言]。

JavaScript 轻量级函数式编程

目录

  • 引言 (by Brian Lonsdorf aka "Prof Frisby")
  • 前言
  • 第 1 章:为什么使用函数式编程?

    • 置信度
    • 交流渠道
    • 可读性曲线
    • 接受
    • 你不需要它
    • 资源

      • 书籍推荐
      • 博客和站点
      • 一些库
      • 总结
  • 第 2 章:函数基础

    • 什么是函数?

      • 简要的数学回顾
      • 函数 vs 程序
    • 函数输入

      • 输入计数
      • 随着输入而变化的函数
    • 函数输出

      • 提前 return
      • 未 return 的输出
    • 函数功能

      • 保持作用域
    • 句法

      • 什么是名称?
      • 没有 function 的函数
    • 来说说 This ?
    • 总结
  • 第 3 章:管理函数的输入(Inputs)

    • 立即传参和稍后传参

      • bind(..)
      • 将实参顺序颠倒
    • 一次传一个

      • 柯里化和偏应用有什么用?
      • 如何柯里化多个实参?
      • 反柯里化
    • 只要一个实参

      • 传一个返回一个
      • 恒定参数
    • 扩展在参数中的妙用
    • 参数顺序的那些事儿

      • 属性扩展
    • 无形参风格
    • 总结
  • 第 4 章:组合函数

    • 输出到输入

      • 制造机器
      • 组合的变体
      • 通用组合
      • 不同的实现
    • 重排序组合
    • 抽象

      • 将组合当作抽象
    • 回顾形参
    • 总结
  • 第 5 章:减少副作用

    • 什么是副作用

      • 潜在的原因
      • I/O 效果
      • 其他的错误
    • 一次就好

      • 数学中的幂等
      • 编程中的幂等
    • 纯粹的快乐

      • 相对的纯粹
    • 有或者无

      • 思考上的透明
      • 不够透明?
    • 纯化

      • 封闭的影响
      • 覆盖效果
      • 回避影响
      • 总结
  • 第 6 章:值的不可变性

    • 原始值的不可变性
    • 从值到值

      • 消除本地影响
    • 重新赋值

      • 意图
      • 冻结
    • 性能
    • 以不可变的眼光看待数据
    • 总结
  • 第 7 章: 闭包 vs 对象

    • 达成共识
    • 相像

      • 状态
      • 行为,也是一样!
      • (不)可变
      • 同构
    • 同根异枝

      • 结构可变性
      • 私有
      • 状态拷贝
      • 性能
      • 总结
  • 第 8 章:列表操作

    • 非函数式编程列表处理
    • 映射

      • 映射 vs 遍历
      • 一个词:函子
    • 过滤器
    • Reduce

      • Map 也是 Reduce
      • Filter 也是 Reduce
    • 高级列表操作
    • 方法 vs 独立
    • 查寻列表
    • 融合
    • 列表之外
    • 总结
  • 第 9 章:递归

    • 定义
    • 为什么选择递归
    • 声明式递归
    • 重构递归
    • 总结
  • 第 10 章:异步的函数式

    • 时间状态
    • 积极的 vs 惰性的
    • 响应式函数式编程
    • 总结
  • 第 11 章:融会贯通

    • 准备
    • 股票信息
    • 股票行情界面
    • 总结
  • 附录 A: Transducing

    • 首先,为什么
    • 如何,下一步
    • 最后
    • 总结
  • 附录 B: 谦虚的 Monad

    • 类型
    • 松散接口
    • Maybe
    • Humble
    • Humility
    • 总结
  • 附录 C: 函数式编程函数库

    • Ramda (0.23.0)
    • Lodash/fp (4.17.4)
    • Mori (0.3.2)
    • 总结
  • 关于出版

    本书主要在 on Leanpub 平台上以电子版本的形式进行出版。我也尝试出售本书的纸质版本,但没有确定的方案。

    除了购买本书以外,如果你想要对本书作一些物质上的捐赠,请在 patreon 上进行操作。本书作者感谢你的慷慨解囊。


    Patreon

    Contributions

    非常欢迎对于本书的任何内容贡献。但是在提交 PR 之前请务必认真阅读 Contributions Guidelines。

    License & Copyright

    本书所有的材料和内容都归属 (c) 2016-2017 Kyle Simpson 所有。

    Creative Commons License

    P.S.  整理的好辛苦 %》——《%

    你可能感兴趣的:(javascript,函数式编程)