V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
James369
V2EX  ›  问与答

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

  •  
  •   James369 · 2021-02-24 11:09:16 +08:00 · 2512 次点击
    这是一个创建于 1398 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直以来都用 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   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.