有没有函数式编程比较经典的实践? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
James369
V2EX    问与答

有没有函数式编程比较经典的实践?

  •  
  •   James369 2021-02-24 11:09:16 +08:00 3046 次点击
    这是一个创建于 1757 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直以来都用 OOP 来设计和编写软件,很容易建模也很自然。

    不过最近多处看到函数式编程,所以就查了一下,但是还是没搞懂,在我看来好像就是函数作为参数传递,想不出来它是怎么来构建一个软件系统。
    所以想问下,有没有比较好的函数式编程应用的 案例、项目、或框架之类的。

    谢谢!
    10 条回复    2021-02-24 15:35:59 +08:00
    zxCoder
        1
    zxCoder  
       2021-02-24 12:00:41 +08:00
    感觉只是个噱头 没啥**大的**实用性
    SuperMild
        2
    SuperMild  
       2021-02-24 12:09:44 +08:00
    纯函数式写起来爽,但读代码、维护时就比较考验智商了。
    masquerader
        3
    masquerader  
       2021-02-24 12:11:42 +08:00   1
    函数作为参数传递,只是函数式编程的一个很小的特性,即所谓的“高阶函数”,Higher Order Functions 。高阶函数用的得心应手的话已经可以让编程过程流畅愉悦很多了。
    OOP 有一整套关于设计的实践,比如“设计模式”之类,对应的函数式也有一整套关于设计的实践,后面你会看到 Functors/Monads 之类的术语,不要看很多装逼书说的必须要懂范畴论之类的扯淡话,找几个靠谱的网站,一本好一点的书就能学透了。
    如果你不挑语言的话,看看这篇文章大概了解下 FP 的一些设计模式做个入门,后面把这个网站所有内容翻一遍,FP 你能了解个大概了。
    https://fsharpforfunandprofit.com/fppatterns/
    SuperMild
        4
    SuperMild  
       2021-02-24 12:12:15 +08:00
    对函数式感兴趣的推荐看看这个 https://fsharpforfunandprofit.com
    mmdsun
        5
    mmdsun  
       2021-02-24 12:34:41 +08:00 via Android   1
    《 Functional and Reactive Domain Modeling 》 函数响应式领域建模可以看这个书籍。

    框架 Reactive Extensions,Akka,Spring Reactive webflux 。

    重点是 Reactive 不是 Functional 。

    Reactive 思想可以参考 msdn 文档,最早是微软搞出来的思想
    bignullnull
        6
    bignullnull  
       2021-02-24 13:58:03 +08:00
    试试 erlang
    iahu
        7
    iahu  
       2021-02-24 14:20:01 +08:00
    FP 在实践中的主要作用是,因为遵循了纯函数、状态无副作用等核心规则,从而可使各个模块间的关系独立,状态易追踪,从而提高代码的可替换性和稳健度。

    而在过程中会把一个复杂的工程分解成了多个相互独立不依赖的子任务,也可降低工作复杂度。

    另外理解了其思想,对模块的依赖关系 /接口设计也有所帮助。

    关于上面有人提到的可读性,其实用什么范式写代码都有可能存在可读性差的问题,而使用 FP 范式有可能很好读。FP 对于函数的组织方式是比较讲究的,有很多套路和技术方法专门针对函数组织方式,以使代码很可读、可维护。
    edwardwo
        8
    edwardwo  
       2021-02-24 15:14:38 +08:00
    FP 中的一个重要概念就是 data immutability. React, Redux 就是充分发挥 FP 的思想, 由于 React component 中的 state object 一旦建立是不能直接修改(immutability), 要修改, 只能通过 FP 的一些工具(如: Reducer)生成一个新 object, 这样方便页面知道何时需要渲染.
    看看 Redux 源码就基本心里有谱了.
    Jirajine
        9
    Jirajine  
       2021-02-24 15:24:52 +08:00 via Android
    暂时忘掉你所知的 OOP 和命令式的编程语言,然后学一下 haskell 。
    chihiro2014
        10
    chihiro2014  
       2021-02-24 15:35:59 +08:00
    比如 excel ?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5078 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 01:18 PVG 09:18 LAX 17:18 JFK 20:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86