百科问答小站 logo
百科问答小站 font logo



什么是 Functional Programming? 第1页

  

user avatar   jiyinyiyong 网友的相关建议: 
      

本来你就是不想折腾汇编的。发现 OOP 挺实用的拿来写写业务,就是代码真那个啰嗦了点。

看看 FP 有什么不一样的招...

然后你就想引入函数一等公民,高阶函数,借助闭包的能力做大量函数代码复用来减少工作量。就是逻辑复杂了点。

然后你就想引入 immutable data,这样逻辑可以尽情复杂,因为数据不可变,那么就不会有数据改变导致的这一类各种 bug 了。就是不可变数据这个性能费心一点。

然后你就想引入 memoization 对程序逻辑进行性能优化,而这一般需要是 pure function,这样才能用前次计算结果替代原来的表达式,才能在函数风格代码当中发挥出 memoization 的效力,同时进一步梳理程序结构,让 pure functions 呈现出数据流的层次。此时程序中的 effects 就需要被分离出来管理了。就是绕了点。

然后你就想用 FP 的思路重新审视内存和 effects,一方面熟悉内存操作以便从底层对数据的内部结构进行优化,定位性能瓶颈从内存相关的算法当中找到优化方案,一方面思考程序中无处不在的 effects 怎样能在跟计算分离的同时,按照业务需求跟各个 module 的生命周期准确对应上,并以此推广开对程序各个部分进行约束。就是涉及到的方面多了点。

然后你就想引入 algebraic data types 对程序进行指导和约束,也通过编译器基于类型的自动匹配,进一步压缩手工的逻辑代码,并依靠编译器保证代码的正确性。这下 monad 就被编译器凸显出来了,你发现自己得补一点学校也没教到的领域的数学知识。就是抽象了点。

然后你就发现 functional programming 标杆语言 haskell 被人吐槽类型系统不够强大,无法表达 λp 的类型... 你也发现 haskell 当中的函数实际上更多指的是组合子,那些柯理化函数往源头追踪过去是逻辑学当中的组合子... 你还发现一碰到逻辑学术语不是一般的多,别人不再给你推荐 GitHub 上什么什么项目了直接就是给你 paper....

然后你想去知乎看看有没有简单点的版本,点开个问题,什么是 functional programming 呢?




  

相关话题

  如何向一个只有命令式编程背景的人解释函数式编程中的函数? 
  JavaScript 是什么? 
  如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥? 
  重载 Throwable.fillInStackTrace() 方法以提高Java性能这样的做法对吗? 
  电脑存在“熟悉”某项任务后运行变快的情况吗? 
  假如我写出了一种秒杀之前所有编程语言各种性能的语言会怎么样? 
  为什么有些编程语言写完一句后要加分号? 
  现实中程序员是怎样飞快敲代码的? 
  有没有可能运用人工神经网络将一种编程语言的代码翻译成任意的另一种编程语言,而不经过人工设计的编译过程? 
  请问大家一开始是怎么学编程的? 

前一个讨论
如何看待“6岁女童遭邻居13岁男孩侵害,处女膜裂口,男孩家人却说:初一正学人体构造,愿赔5千”的行为?
下一个讨论
血液循环理论可证伪吗?





© 2025-01-23 - tinynew.org. All Rights Reserved.
© 2025-01-23 - tinynew.org. 保留所有权利