Kni*_*t71 5 functional-programming scala
我正在学习使用scala进行函数式编程.一般来说,我注意到for循环在功能程序中没有太多使用,而是使用map.
问题
在性能,可读性等方面使用map for for循环有什么好处?
使用循环可以实现映射功能的目的是什么?
程序1:使用For循环
val num = 1 to 1000
val another = 1000 to 2000
for ( i <- num )
{
for ( j <- another)
{
println(i,j)
}
}
Run Code Online (Sandbox Code Playgroud)
计划2:使用地图
val num = 1 to 1000
val another = 1000 to 2000
val mapper = num.map(x => another.map(y => (x,y))).flatten
mapper.map(x=>println(x))
Run Code Online (Sandbox Code Playgroud)
程序1和程序2都做同样的事情.
答案其实很简单。
每当您在集合上使用循环时,它都有一个语义目的。您想要迭代集合的项目并打印它们。或者您想将元素的类型转换为另一种类型(映射)。或者您想要更改基数,例如计算集合元素的总和(折叠)。
当然,所有这些也可以使用 for 循环来完成,但对于代码的读者来说,与众所周知的命名操作(例如 map、iter、fold、筛选, ...
另一方面是,for 循环会导致使用可变状态的阴暗面。在没有可变状态的情况下,如何在 for 循环中对集合的元素求和?你不会。相反,您需要编写一个递归函数。因此,为了更好地衡量,最好尽早放弃在 for 循环中思考的习惯,享受勇敢的新函数式做事方式。