面向函数范式编程

函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程。 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合。     首先,什么是函数式编程,这并没有唯一定义,它只是广泛接受的聚合了一些特性的编程风格,我们可以将它与面向对象编程OOP进行对比, 两者区别是,OO主要聚焦于数据的区别,而FP则注重数据结构的一致性。   面向对象:  

  1. 数据和对数据的操作紧紧耦合
  2. 对象隐藏它们操作的实现细节,其他对象调用这些操作只需要通过接口。
  3. .核心抽象模型是数据自己
  4. 核心活动是组合新对象和拓展已经存在的对象,这是通过加入新的方法实现的。

函数编程:  

  1. 数据与函数是松耦合的
  2. 函数隐藏了它们的实现,语言的抽象是函数,以及将函数组合起来表达。
  3. 核心抽象模型是函数,不是数据结构
  4. 核心活动是编写新的函数。
  5. 变量缺省是不变的,减少可变性变量的使用,并发性好

  那么OOP和FP在业务领域是否有胜者呢我们大部分业务逻辑是这样写:     SELECT orders.order_id, orders.order_date, suppliers.supplier_name   FROM suppliers   RIGHT OUTER JOIN orders   ON suppliers.supplier_id = orders.supplier_id   WHERE orders.order_status = ‘INCOMPLETE’   ORDER BY orders.order_date DESC;     SQL是非常类似FP,它能渗透到业务中,它使用一致的数据结构(数据表结构Schema),一些基本函数能组合成很多查询语句,它是declarative声明式的, 也就是说,写出的SQL是告诉数据库我需要什么,数据库就为你返回,而不必指定数据库如何具体去查询。   声明式 编程和命令式编程区别FP的主要特点是它们描述它们要”什么”,而不是如何实现。而OO在其方法中,还是使用大部分命令式技术。 下面是命令式技术代码:   var sumOfSquares = function(list) {   var result = 0;   for (var i = 0; i < list.length; i++) { result += square(list[i]);   }   return result; }; console.log(sumOfSquares([2, 3, 5]));   函数编程代码如下: var sumOfSquares = pipe(map(square), reduce(add, 0)); console.log(sumOfSquares([2, 3, 5]));   函数风格的 编程特点:  

  1. 第一等公民是函数
  2. 带有闭包的Lambdas/Anonymous函数
  3. 大部分无态处理
  4. 无副作用的调用
  5. 通过tail call实现递归的性能优化。
  6. 模式匹配(Haskell, Erlang)
  7. 懒赋值(Miranda, Haskell)
  8. Homoiconicity(类似LISP)

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树内置函数其它函数31863 人正在系统学习中 相关资源:软件开发范型(Paradigm)-清华大学郑人杰_殷仁昆教授_《软件工程…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年5月9日
下一篇 2017年5月10日

相关推荐