百科问答小站 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 呢?




  

相关话题

  为什么程序比较难写、bug 比较难调呢? 
  递归和循环相比耗费更多的空间,对于循环来说除了可以简化逻辑外还有什么优点吗? 
  关于C#和Java对于结构体的保留,孰优孰劣? 
  C 语言执行 a=a++; 后,a 的值应该加一还是不变? 
  为什么微软不出一门像 Go 或者 Rust 的跨平台系统级语言? 
  作为一名程序员需要掌握的相关知识是需要「广」还是「精」? 
  Qt 为什么在桌面应用(Windows 平台)中不流行呢? 
  if(x>y)和if(x-y>0)有没有区别(x,y都是int)? 
  如何系统地测试一门语言(规定工具链,运行时,以及运行环境)的性能? 
  如果有一天代码再也不用手敲文本而可以通过图形模块化生成,那么现有的大部分程序员还要何去何从? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利