函数式编程的原理,最佳实践和设计模式

ami*_*wal 23 design-patterns functional-programming principles

在使用函数式编程语言编写代码时,是否有任何已知的原则,最佳实践和设计模式?

fis*_*ips 20

有折叠,展开,地图等.

我考虑使用它们的最佳实践,因为它很容易推理它们的行为,并且它们经常传达函数的目的(例如,只需看看着名的Haskell程序员的演变和对比新生与高级,和教授一起).


Nor*_*sey 10

设计模式:让类型指导您的编码.

  1. 找出你想要返回的类型.

  2. 知道某些类型构造函数具有某种语法,并利用它来使所需类型更小.这是两个例子:

    • 如果您尝试返回函数类型T1 -> T2,则始终可以安全地编写

      \ x -> ...
      
      Run Code Online (Sandbox Code Playgroud)

      现在你正在尝试生成一个类型的值T2,这是一个较小的类型,而且你已经获得了额外x的类型值T1,这可以使你的工作更容易.

      如果lambda变得不必要,你可以随时将它减少.

    • 如果您尝试生成一对类型(T1, T2),则可以始终尝试生成x类型T1y和类型值T2,然后形成该对(x, y).同样,您已将问题简化为类型较小的问题.

  3. 一旦类型尽可能小,您可以查看范围内所有let-bound和lambda-bound变量的类型,并了解如何生成所需类型的值.通常,您希望使用所有函数的所有参数; 如果你不这样做,请务必解释原因.

在许多情况下,特别是在编写多态函数时,这种设计技术可以将复杂函数的构造减少到一个或两个选项.这些类型指导程序的构造,因此很少有方法可以编写正确类型的函数 - 通常只有一种方法没有明显错误.


Nor*_*sey 9

最佳实践:使用代数数据类型并利用模式匹配编译器的详尽检查.特别是,

  • 永远不要匹配_顶级的通配符模式.

  • 设置编译器选项,以便模式匹配中缺少的大小写是错误,而不是警告.


Jul*_*les 7

不要遵循原则,遵循你的鼻子.保持功能简短.寻找降低代码复杂程度的方法,这通常但不一定意味着最简洁的代码.了解如何使用内置的高阶函数.

在编写函数后立即重构并减小函数的代码大小.这样可以节省时间,因为明天您不会在脑海中遇到问题和解决方案.