Scala 关注点分离

Scala 关注点分离,scala,functional-programming,Scala,Functional Programming,我正试图通过作者在第5章提到的书学习scala中的函数式编程: 函数式编程的一个主要主题是关注点和对象的分离 将程序描述与评估分开 这是什么意思?有人能举个例子吗?关键是这个短语 将程序描述与评估分离 例如,使用由ADT(表示DSL语法)表示的DSL和解释器。因为其他人可能比我更详细地描述这一点,所以我将在这里链接到一个示例: 它使用的是免费的monad,这是目前比较热门的话题,但在我看来,它很好地展示了您的要求。这里我提供了一个手动实现尾部递归的示例 这是一个算法描述和评估分离的例子。 Rec

我正试图通过作者在第5章提到的书学习scala中的函数式编程:

函数式编程的一个主要主题是关注点和对象的分离 将程序描述与评估分开


这是什么意思?有人能举个例子吗?

关键是这个短语

将程序描述与评估分离

例如,使用由ADT(表示DSL语法)表示的DSL和解释器。因为其他人可能比我更详细地描述这一点,所以我将在这里链接到一个示例:


它使用的是免费的monad,这是目前比较热门的话题,但在我看来,它很好地展示了您的要求。

这里我提供了一个手动实现尾部递归的示例

这是一个算法描述和评估分离的例子。
Recursive
trait只描述了某些递归算法的一次迭代。 方法
explore
对算法的逻辑一无所知,只运行它直到完成。
例如,您可以在迭代之间引入延迟或限制迭代次数,而无需更改
Recursive
中描述的算法

我认为关注点分离是任何编程语言中的一个主要主题。根据我所学到的,这意味着你应该将一个程序细分为几个部分,每个部分(旨在)解决一个关注点/问题。各部分应尽可能独立于其他部分。
程序说明
的含义是什么?描述程序应该做什么的文档。例如,程序描述可以是“一个人输入订单的系统,员工可以在其中标记哪些订单已完成”。虽然通常情况下,它当然更广泛。如果你读了第一章(关于咖啡馆),这是一个很好的例子。buyCoffee函数与事务等无关。