类型签名

Hindley Milner 类型签名

  • 代码最好的文档
  • 标明输入和输入
  • Compile time checks

HM系统中,用a,b类似这样的来代表类型,a引用代表的一定是同一个类型,a和b一定是不同的类型。

函数式攻城指南.md

第一章 函数式JavaScript

3种常见编程范式 + 1

  • 命令式 (C语言) 由一条条的命令组成
  • 面向对象(JAVA) 对象与对象之间通过消息传递信息
  • 函数式 (Clojure) 更像是套用数学公式 扩展
  • 逻辑式 (SQL的query语句) 通过提问找到答案的编程方式

一等公民 : 函数和值有相同的地位,所有值在的地方都可以被函数替代。

JavaScript 的函数式支持

  • 函数作为参数,典型的是 ES6的Array.Map(()=>{})
  • 函数作为返回值,典制:柯里化(将多个参数的函数变为一次只能接受一个参数的函数)、thunk (?)
  • 越来越函数式的ES6
  • ES6的箭头函数
  • Destructure 解构
  • 尾递归优化 ?

JavaScript 与函数式编程的距离

  • Javascript中除了6种原始类型(Boolean,Undefined,Null,Number,String,Symbol)之外的第7种Object类型数据结构是可变的
  • 缺少惰性求值,比如数组中有1000个元素,但是只需要操作前10个元素
  • 缺少对函数组合的支持
  • 缺少尾递归优化

Clojure :运行在JVM上的Lisp方言

ClojureScript: 能够编译成javascript的Clojure


第二章、集合

集合是 函数式编程中 最常用到的数据结构

向量:带有索引的一组数据,向量拥有俩个特性:
  • 不可变性(immutable): 一旦被创建,就不可改变
  • 持久性(persistent):“改变“数据结构的另一种方式,返回一个建立在旧数据上的新数据结构
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×