首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOLID for函数式编程

SOLID for函数式编程
EN

Stack Overflow用户
提问于 2011-04-07 14:46:45
回答 4查看 8.6K关注 0票数 40

我来自OOP语言,熟悉面向对象设计的坚实原则。其中一些似乎适合函数式编程模型,而其他部分在缺乏状态的世界中毫无意义。重构功能代码是否有一套类似的原则?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-07 16:49:40

据我所知(我不是专家),可靠的原则不能说明任何关于状态的东西。它们也应该适用于函数式编程语言。他们更多的是关于如何实现模块化的建议。

其中一些是相当明显的,或者至少是众所周知的。单一责任是UNIX的原则“做一件事,做好它”,这在“组合”被广泛使用的函数式语言中更为流行,同样。接口分离原则也是非常自然的(让你的接口模块化,并保持正交概念的分离)。最后,依赖反转只是“抽象”的一个名称,在函数式编程中无处不在。

"OL“原则,开放/封闭和LSP,更多地面向作为核心软件工程概念的基于继承的语言。默认情况下,函数式语言值/模块没有开放递归,因此“实现继承”只在非常特殊的情况下使用。最好是合成图。在这种情况下,我不确定您应该如何解释开放/关闭原则。你可能会认为它是关于封装的,函数式程序也大量使用,使用抽象类型等。

最后,Liskov替换原则似乎与继承有关。函数式语言并不总是使用子类型,但当它们使用子类型时,确实假设“派生类型”应该保留“基本类型”的规范。函数式程序员当然会小心地指定和尊重他们的程序、模块等的接口和属性,并且可能会使用代数推理(这等同于此,所以我可以替换...)然而,一旦你摆脱了“默认继承”的思想,你就不会有太多的接口冲突问题,所以LSP并不像在OOP中那样被强调为一个重要的保障。

票数 55
EN

Stack Overflow用户

发布于 2014-07-14 16:28:04

This video介绍了可靠的原则,以及如何在Clojure中应用这些原则。

它展示了这些原则在函数式世界和OOP中是如何成立的,因为我们仍然需要解决相同的潜在问题。总体而言,这让我认为函数式编程更适合于可靠的设计。

票数 7
EN

Stack Overflow用户

发布于 2020-06-23 13:36:39

实际上,SOLID可能是一个更好的函数式编程原则:

  • SRPOnly do one thing是从命令式编程中脱颖而出的。有小的、有焦点的函数是很好的。

允许你在不修改代码的情况下改变行为的

  • OCP:是很好的。函数式编程更多地使用高阶函数而不是继承,但这一原则仍然有效。

在函数式编程中,遵守某些接口约定的

  • LSP:与在面向对象编程中一样好。如果一个排序函数接受一个比较器,那么你会期望'0等于,小于提供负结果,大于正结果‘的行为。

  • ISP:大多数函数式语言仍然有结构。指定函数所需的最小数据集仍然是一种好的做法。需要最不具体的数据接口(当T的枚举同样有效时,为什么还要使用整型列表?)仍然是很好的做法。

在函数式编程中,将参数指定给函数(或使用更高阶的函数来检索参数)而不是硬编码函数以获取某些值,在函数式编程中与在object-oriented.中一样好

即使在进行面向对象的编程时,这些原则中的许多也适用于对象中的方法的设计。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5577054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档