2009年12月09日 15:04 "weidagang2046"的内容

推荐一篇FP的文章,里面对FP的优势做了很好的介绍。在OO语言中也可以借鉴一些FP的风格改进设计。http://www.cnblogs.com/erain/archive/2008/12/14/1354810.html

彻底受教了,不过对这篇文章有不敢苟同之处:

之前一段试图将数学哲学化很让我反感,这是典型的泛数学主义思想,数学之外还有一个艺术,不是所有事物都可以量化数学化,如果可以,如今就不存在那么多未知领域和疑惑,也不能认为混沌结构思维毫无用处,中国人靠中医活下来了,活得不差。这是灌水,不多说。

用currying说明设计模式就不需要使用,这也只是一厢情愿(GoF设计模式三作者15年后再谈模式),算法数学占据主要地位大概只有特定算法科学领域,现实的胶水模块领域,还必须注重架构和模式,在DDD中有一段对算法观点:

1.算法或计算非常复杂,导致设计受到了冲击,模型中的概念变成了用“怎么做”来解释,而不是用“是什么”表达。(主次颠倒)

2. 算法本身存在内聚性(因为它能用公式表达,公式就是算法具有内内聚性的特征),使用策略模式等框架把这些内聚计算分离出来,用一个明确接口来说明这个框架的功能,将怎么做复杂细节交给框架(主要管算法的API)去完成。

3.我们计算方法不可能把所有功能都包含进来,我们需要的也不是一种万能计算机制。(批评那种算法万能观点,没有一个算法能够把万事万物功能算进来,如果是,就成了周易算命了)。

在DDD中将副作用也就是边界影响归纳为柔性设计,所谓柔性实际就是艺术性的事情,这是架构的目标,DDD认为柔性设计为:

1.明显意图的接口:面向接口编程,做什么目的在接口中清晰表达,而无需翻看具体代码。

2.边界影响: 消除边界影响,不要搞一机多能。

3.粒度适当界定 粒度不能太大,造成重复和冗余,很多概念混在一起;当然粒度也不能太细,以至于太碎,不能完整表达一个领域概念。高聚合、低关联。

4.消灭依赖 每复杂的依赖关系无疑提高了系统的复杂性,每个依赖都是值得怀疑的。

5.操作封闭 服务行为操作的是同一个类型,不要一次性处理多个模型。

6.声明性设计,尽量使用成熟框架,保证质量。 如DSL

可是这些这篇文章中用轻飘飘一句:“因为 lambda 演算不是被设计为在物理局限下工作的。因此,象面向对象的编程一样,函数式编程是一系列理念,而不是严格的教条,”这其实就是柔性艺术性的特征,由于作者背景知识原因没有认识到罢了。

所以,函数式编程和OO不矛盾,而且是在OO世界中属于一个“怎么做”的问题,而OO方法论如DDD是解决把“是什么”和“怎么做”如何分开。

说得详细一点:“是什么”就是需求是什么,先要把需求说清楚,功能要求说清楚;“怎么做”是如何实现问题,通过软件技术架构或算法等等科学来实现。

btw:由于我们都是在学“怎么做”中长大的,忘记“是什么”这个主要目标,就容易造成井底观蛙,舍本求末,南辕北辙,这实际是为什么当前科学总是不能转化为生产力的原因之一。

以上只是个人想法。

[该贴被banq于2009-12-09 16:29修改过]

c语言boon类型函数,函数式编程functional programming的特点相关推荐

  1. R语言函数式编程(Functional Programming)概念

    R语言函数式编程概念 functional 泛函 R语言的函数是first-class function 一等函数,higher-order function高阶函数,函数可以作为函数参数传入,这些特 ...

  2. 【编程语言】函数式编程 Functional Programming

    函数式编程 1. 引言 "函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 它属于"结构化编程 ...

  3. 面向函数范式编程(Functional programming)

    函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...

  4. 闭包和高阶函数-函数式编程的基本特征

    函数编程支持函数作为第一类对象,有时称为闭包或者仿函数(functor)对象.实质上,闭包是起函数的作用并可以像对象一样操作的对象.与此类似,FP 语言支持高阶函数.高阶函数可以用另一个函数(间接地, ...

  5. vue3 - 23.h函数 / 函数式编程

    vue3 支持 template 语法,和 JSX / TSX 语法,同样也支持 函数式编程 函数式编程会用到h函数,h函数接收三个参数,分别是: h("     1.type 元素类型, ...

  6. Python函数-函数式编程

    文章目录 1 函数式编程 2 Python函数式编程 2.1 map() 2.2 filter() 2.3 filter() 1 函数式编程 所谓函数式编程,是指代码中每一块都是不可变的(immuta ...

  7. JS函数——函数式编程

    文章目录 前言 一.什么是函数式编程? 二.为什么使用函数式编程? 1. 函数式编程能提高复用性和可拓展性 2. Tree-shaking(摇晃树webpack中的功能) 3. 如何写好函数式编程? ...

  8. random函数用法_Python函数式编程:从入门到走火入魔

    很多人都在谈论函数式编程(Functional Programming),只是很多人站在不同的角度看到的是完全不一样的风景.坚持实用主义的 Python 老司机们对待 FP 的态度应该更加包容,虽然他 ...

  9. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  10. python函数式编程读取数据时出现错误_写 Python 代码不可不知的函数式编程技术...

    原标题:写 Python 代码不可不知的函数式编程技术 选自 Medium 作者:Raivat Shah 参与:魔王.Jamin 本文对 Python 中的函数式编程技术进行了简单的入门介绍. 近来, ...

最新文章

  1. c语言知道算法写不出代码,这个代码怎么写算法啊,求教,我真的不会写算法怎么办#incl...
  2. Func vs. Action vs. Predicate [复制]
  3. python的优缺点有哪些-python的优缺点有哪些
  4. 大话设计模式Python实现-简单工厂模式
  5. 在Azure Cosmos DB里设置filter搜索记录
  6. 协同过滤进化版本NeuralCF及tensorflow2实现
  7. JavaFX 2.0和Scala,像牛奶和饼干
  8. Java 中 finally 与 return 的执行顺序详解
  9. concurrentbag 删除_你知道吗?这样删除iPhone中的APP腾出的空间会更大
  10. 小议C++中函数的参数的传递
  11. 独辟蹊径品内核 轻松领悟读书高境界
  12. CamShift算法,OpenCV实现1--Back Projection
  13. springboot智慧幼儿园管理系统的设计与实现毕业设计源码271611
  14. RT-Thread : IEEE1588/PTP 协议的实现(2)
  15. 力扣(leetcode) 69. x 的平方根 (四种方法解决,总有一种是你会的~)
  16. struts2拦截器的一个使用实例
  17. 基于SpingBoot2.0与activiti7.x构建的一套工作流程管理系统
  18. ICCV2021:Rethinking Coarse-to-Fine Approach in Single Image Deblurring
  19. 疯狂java讲义(李刚)6.2
  20. 离散数学 (II) 习题 8

热门文章

  1. 7. memcache 细节
  2. 18. CSS 内边距
  3. 12. jQuery - 获得内容和属性
  4. html中表格table的内容居中显示
  5. python2.7.10 VS2015编译方法
  6. 团队-科学计算器-代码设计规范
  7. 20170813xlVBA跨表筛选数据
  8. 创建一个jFinal项目
  9. 一道综合练习题实践list及dictionary集合类
  10. AndroidStudio debug