scala - 函数式编程原理

标签 scala apache-spark functional-programming

所以,我是函数式编程的新手,我仍在努力消化基本原理。到目前为止,我可以理解,理想情况下,应该在没有可变变量赋值循环和其他命令式控制结构的情况下进行编码。所以我有一个问题。在以下两个代码片段之间:

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = {

     val temp = functionA(xRDD, yRDD)
     functionB(temp, zRDD)
}

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = {
     functionB(functionA(xRDD, yRDD), zRDD)
}

我应该选择哪一个,为什么?我的猜测是第二个,因为它避免了将数据本地分配给临时值。这就是全部内容了吗?我做对了吗?我错过了什么吗?

最佳答案

两种方式都很好,但取决于使用哪种方式。

这两种方式都没有什么问题。您可以使用上述任何一种方式。但是,由于除了函数 B 之外,您没有在任何地方使用函数 A 返回的值。第二种方式看起来不错(没有额外的变量)。额外的变量不太重要(引用消耗的内存对于实际目的来说是微不足道的。)

误解

在函数式编程中赋值是可以的。重新分配是不行的。 在函数式编程中使用变量捕获结果是可以的。但使用 var 并重新分配 var 并不是函数式编程。

关于scala - 函数式编程原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40722589/

相关文章:

java - 如何在 Scala 中扩展通用 Java 类?

scala - SparkSession.Builder 失败,错误代码 "A master URL must be set in your configuration": "spark.master" is set to "local"

hadoop - 与Hadoop一起了解Spark

csv - 如何在数据框中指定缺失值

functional-programming - Dart 是否支持函数式编程?

haskell - 在非功能性项目中集成 Haskell

haskell - 'Chaining operations' 是 Monad 类解决的 "only"吗?

xml - pretty-print - Spark/Scala 中的 XML 单记录

scala 2.8集合不一致?

apache-spark - 如何在Linux环境下按小时计划pyspark脚本