如果您使用Scala作为命令式语言,那么您做错了吗?

时间:2012-10-02 16:53:31

标签: java scala coding-style functional-programming

例如,在上一个问题中:Scala coding styles and conventions?

有人抱怨“如果方法增长,那么阅读代码会变得非常痛苦”“..

和Martin Odersky博士回答“ ..功能性编程风格是有很多小方法...... 。”

这就意味着当你使用Scala时,你应该尽可能地用FP风格编写,不要把Scala当作Java的替代品。

3 个答案:

答案 0 :(得分:3)

Scala的美妙之处在于它可以为不同的人提供不同的东西。鼓励以功能性方式写作。但是,你也可以用命令式的方式编写Scala。

即使以强制性的方式写作,也鼓励您编写小方法。这使代码更易于阅读和维护。

答案 1 :(得分:3)

为了给你一个小例子,为什么鼓励功能样式,想象你有2个不保证相同大小的整数列表,你必须创建一个新的整数列表,其总和最多为较短的长度名单。在命令式的风格中,你会做这样的事情:

val list1 = List(1,2,3,4,5)
val list2 = List(1,2,3,4,5,6,7)

// imperative way
val newList = collection.mutable.ListBuffer[Int]()

val length = math.min(list1.size, list2.size)

for(i <- 0 until length) {
  newList += list1(i) + list2(i)
}

// functional way
list1.zip(list2).map { case (x,y) => x+y }

请参阅,第二个示例更小,更侧重于“做什么”而不是“如何”做到这一点。每个人都必须从某个时刻开始,起初你可以编写正常的命令式代码,但迟早你会采用越来越多的功能范例,只是因为它们使你的代码更好更安全。

答案 2 :(得分:0)

我喜欢Scala的是它是一种多范式语言。您可以用任何最好的方式编写代码来解决问题。

我强烈怀疑,随着时间的推移,您将在某些代码中转向更具功能性的风格。但不一定都是(确实存在一些问题,其中强制性方法更简洁地描述了问题)。

当然有些人会根据&#34;对&#34;来表达这种事情。并且&#34;错误&#34;,但我怀疑他们错过了这一点。如果您想编写纯功能代码,请使用纯函数式语言。