• 硕根
    2018-01-23
    同样是业务代码的实现(抛开框架,中间件,基础设施的研发),前端更多的是声明式,函数式,反应式的编程,后端更多的是面向过程,事务,对象的编程,不知道皓叔怎么看这种差异的根源?
    
     22
  • minghu6
    2018-02-14
    一直不太明白一点,函数式编程的特点之一就是就是immutable,这就是说函数总是应该返回新的值而不是修改旧的值。但是,如果要处理一个很大的list,深拷贝的代价是不是太大了?

    进一步说,在编程解决实际问题的时候,往往需要依赖第三方的库。一方面大多数的第三方的库往往不是函数式的,引入后就被传染,变成了有状态的,可变的;另一方面,很难找到多少维护良好的通用编程方面的函数式的库。初步学习过common lisp,clojure,以及prolog和erlang,感觉除了这些语言都被局限在了“学术研究”,”语言玩具“,以及由高手组成的小团体的内部“秘密“使用。(erlang还好一些,但是被局限在了很小的领域)。

    最后还是感觉,一门语言,语言特性再好,还是得有杀手级应用,就像支柱产业能带动一大量上下游的发展。就像clojure过去要是没有Storm,可能不会发展这么繁荣。

    个人现在最常用的跟函数式风格有关的还是Java8的stream操作,对于理清思路,减少代码,提高开发效率来说非常有帮助。
    展开
     2
     10
  • 五柳
    2018-02-13
    有幸得以做自己喜欢的事情。一路走来,先是过程式,后是面向对象式,现在则是函数式。每次转变都感觉焕然一新,思路上了一级台阶。

    函数式能帮我们更容易写出精简、易于复用的代码。优势耗子哥已经写的很详细了。我安利一下,学函数式,一定要了解一下 Elixir,会从新的角度理解编程。比如 Elixir 的 pipeline 的设计绝对会有所启发。

    语言不止是工具。语言和编程范式极大影响了我们的思维。
    展开
    
     6
  • JZ
    2018-01-25
    整体设计面向对象,细节能用函数式就用函数式,算法相关过程式。稍微复杂点的场景想使用纯函数式,必然绕不过monad,hkt这样的概念。为了追求函数式风格而把程序写的艰深难懂,我觉得不是一件值得夸耀的事。
    
     6
  • zcom
    2018-01-23
    之前一直不是很理解函数式编程,直到我看了sicp,推荐朋友们有时间可以去看看。当然在工作中很少用过函数式编程,所以耗子哥最后的问题我答不上来……
    
     6
  • wang
    2018-07-13
    在我看来,面向对象编程和函数式编程他们的关注点不一样,面向对象编程帮助你设计更复杂的应用程序,函数式编程帮助你简化更复杂的计算,我身为java后端,一直都是面向对象为主,函数式只是帮助我简化代码。
    
     5
  • mingshun
    2018-05-13
    从过程式编程、面向对象编程、函数式编程一路走来,已经回不去了。对比机械化的过程式编程和层级结构复杂的面向对象编程,函数式编程能够很自然地描述现实世界。特别是用了 Elixir 之后,深感世界本应如此。其 pipeline 设计用起来比其他语言更灵活些,加上继承了 Erlang 的面向进程编程,可直接使用 OTP 开发分布式应用,语法更加人性化,还提供宏作为元编程手段,原生函数库也非常丰富。
    当然也要承认 Elixir 还是很小众。要从底层更多地考虑机器运作的思维向更多地考虑现实问题的思维转换对大部分人来说有难度,毕竟需要转变的还有世界观,而不仅仅是换个编程语言那么简单。
    
     5
  • JK.Ryan
    2018-02-06
    很早就读过coolshell里那篇函数式编程,很受教,今天这篇又加了许多干货,很赞,特别是讲到分布式理论和我们微观处理,其实有异曲同工之处,很有共鸣~👍🏾
    
     4
  • 4Neutrino
    2018-07-09
    耗哥,尾递归的示例代码有一处笔误导致死循环,应为(> counter n)
    
     3
  • Yano
    2018-01-24
    Java服务端开发,还在使用jdk6。可以说我是完完全全面向对象的思维,对于java 8的函数式编程都没有搞透彻。这篇文章很赞!
    
     3
  • 郎哲
    2018-01-23
    Erlang程序员
    默默地走过 只提了一下Erlang…
    
     3
  • fulljay
    2018-09-08
    我做web前端开发的,我觉得面向对象和面向函数,应该结合一起,界面(对象)及对应的事件回调(对象的方法),但到了状态机的处理用pipeline(函数式),所以我会选择在命令式编程语言中使用函数式编程风格
    
     2
  • fsj
    2018-04-04
    现在有很多语言不仅提供了面向对象功能,也提供了函数式编程的功能(比如Swift),在合适的场景选择合适的编程范式就好,当然,统一的编程范式还是让人赏心悦目的
    
     2
  • ryerh
    2018-01-25
    @硕根
    我对这种现象的个人理解是,前端的业务特点是“单App、单节点、UI驱动”,后端的业务特点是“多Service、分布式、数据驱动”,业务特点上的不同导致彼此适应的范式不同。
    
     2
  • 又双叒叕是一年啊
    2019-06-19
    请教下 将运算过程尽量写成一系列嵌套的函数调用, 例如文中的pipeline demo是3个函数进行嵌套,3个函数的入参数都是nums, 我的问题是: pipeline这种编程模型是否要求 所有链式函数中的入参格式都相同,因为入参需要一级一级向下传递
    
     1
  • escray
    2019-06-09
    这篇不太容易看懂,拖延了很久。其中的代码能够看懂,但是的确没有在工作中使用过函数式编程的语言,很久以前看过一点点 Lisp。

    之前用过一段 C# 语言,大概是到 .NET Framework 4.0 之后提供了一些类似于 lamda 的语法糖,以及 LINQ 之类的查询,感觉和这里的函数式编程有点类似。不过当时只是在编辑器插件的帮助下,将命令式(过程式)的语言,转换成函数式的。看上去的确简洁了不少,但是感觉调试起来比较困难。

    后来转而使用 Ruby,Ruby 本身也提供了类似于 map, reduce 之类的函数,似乎有函数式编程的影子。

    感觉似乎命令式编程和函数式编程又相互借鉴、互相印证的地方。

    函数式编程可能更适合高性能计算、或分布式领域,因为更容易发挥其优势。
    展开
    
     1
  • karas
    2019-06-07
    ```python3
    def move_car(car_positions):
        return map(lambda x:(x+1) if random() > 0.3 else x,car_positions)
    ```
    这段代码map出来貌似是`<map object at 0x7fec36218908>`这种对象,导致下一步解析state的时候无法解析,然而如果使用表达式`[x+1 if random() > 0.3 else x for x in car_positions]
    `就完全没问题返回的还是list,这啥原因,python版本的关系?
    展开
     1
     1
  • 北风一叶
    2018-08-02
    定义输入数据和输出数据相关的关系,数学表达式里面其实是在做一种映射(mapping),输入的数据和输出的数据关系是什么样的,是用函数来定义的

    
     1
  • 衡子
    2018-05-30
    过程式编程到函数式编程,不是一门语言的转换。写了两年的Scala,回过头来想想,最多的是用到了Scala提供的filter、map等函数,真正用函数思维去设计、处理问题还是少!
    
     1
  • 大黄
    2018-04-17
    一直对函数式编程一知半解,耗子哥的讲解实在太棒了,有种顿悟的感觉。
    
     1
我们在线,来聊聊吧