我最近遇到了一个人,他说过去面向对象编程(OOP)的方法是回到简单地告诉计算机去做什么,把OOP从你的脑海中清除出来,就像什么都没有发生过一样。我不认为这是个好主意,但我也不认为这是可能的。
面向对象编程,尽管后来过度了,但它在软件工程中是向前迈出的一大步。它使开发比以前大得多的程序成为可能,可能是以前的10倍。有人可能会反驳说,由于OOP的所有开销,程序必须大10倍,但事实并非如此。OOP确实增加了一些开销,并且随着工具和框架变得更加复杂,开销会随着时间的推移而增加,但是OOP使编写以前无法编写的程序成为可能。
OOP为程序员提供了一种组织代码的方法。根据问题的不同,这可能不是最好的方法,但是超越OOP的方法是用另一个规程取代它。我想大多数已经学会然后又没有学会的OOP的人都会这么做,不管他们是否意识到这一点。也许他们保留了在OOP上下文中学习的一些组织模式。
这是我的经验。我几乎不再编写类了;我编写函数。但我编写函数的方式与我花数年编写类之前不太一样。
虽然我不经常编写类,但我确实经常使用来自库的类。有时,这些对象看起来更适合作为纯函数,但我想如果没有函数包装在对象中,同样的库将更难使用。
我通常喜欢函数式编程,但根据我的经验,当您试图将纯度提高到100%时,会出现曲棍球杆力曲线。詹姆斯·黑格说得很好:
100%纯函数式编程不起作用。即使是98%的纯函数式编程也不起作用。但是,如果功能纯洁性和20世纪80年代基本风格的命令性混乱之间的滑块被踢低几个档次-比方说降到85%-那么它真的是有效的。您可以获得函数式编程的所有优势,但不会有随着您越来越接近完全纯净而增加的极端心力和不可维护性。
用纯函数代码开发系统的大部分是可能的,也是一个好主意。但总得有人写一些与外界互动的杂乱无章的部分。