你想要一个香蕉,但得到的却是一个大猩猩拿着一个香蕉

Joe Armstrong—Erlang语言的创造者—就软件的可重用性问题发表的意见:

我认为,可重用性不足是面向对象编程语言里才会有的问题,函数式编程语言没有这个问题。面向对象的编程语言之所以有这个问题是因为它们需要整个的内在的系统做支持。你想要一个香蕉,但得到的却是一个大猩猩拿着一个香蕉,还有整个丛林。

如果你的代码具有亲系透彻性(referential transparency),你用的是纯函数—所有的数据都只跟它的输入参数,输出值有关,不会留下任何的持久状态—这是绝对的可重用性。

来源:Coders at Work。作者用粗体进行强调。

我大部分的工作都是用的面向对象语言,而且近期也不会有任何的改变。我对函数式编程技术更感兴趣,而不是函数式编程语言:我编写纯函数,用函数当作参数或返回值等等。就像Joe Armstrong说的,这种程序代码易于重用。如果你想重用(或测试)一个函数式香蕉,你不需要先造出一个丑陋的大猩猩来拿着这个香蕉。

[英文原文:You wanted a banana but you got a gorilla holding the banana ]
分享这篇文章:

6 Responses to 你想要一个香蕉,但得到的却是一个大猩猩拿着一个香蕉

  1. evan says:

    大猩猩躺着也中枪

  2. haitao says:

    我用delphi,也开始能用函数的尽量不用类,能用类的尽量不用控件(需要注册到ide)
    不过,很多中间过程,需要的支持就是整个对象的所有信息,这也是为什么会出来类

  3. ^J^ says:

    一个丑陋的大猩猩拿着一个香蕉是很搞笑。但是如果你有一吨香蕉,你是想找个大猩猩扛着走,还是用绳子串起来拖着走呢?
    当需要具有具有强相关性的函数族时,定义类和内部变量,使用实例;当使用有弱相关性的函数族时,定义类和静态函数,直接使用函数;不相关的函数?爱哪哪去吧。

  4. wang says:

    我认同这种说法, 我也不喜欢用面向对象的思想, 很多时候项目里用函数比用类来的方便并且也快. 我们要拿香蕉这个动作就行了, 不需要另外实例化一个猩猩类,再让猩猩拿香蕉.

  5. new Coder says:

    我觉得没有绝对,得具体情况具体分析吧。

  6. AndyAo says:

    见过各种各样的说法,各种各样的情况,会有更开阔的思路.
    在这么复杂的世界中,不要想到找到’银弹’,很多所谓的’定理’或者’原则’实际上都是经验而已.
    否则很可能会失望和犯下错误.

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据