gpt4 book ai didi

java - Scala 是函数式编程语言吗?

转载 作者:IT老高 更新时间:2023-10-28 20:55:14 30 4
gpt4 key购买 nike

我从 Java 学习编程,然后尝试每年学习一种编程语言,其次是 C++,然后是 Python。它来学习下一个,我寻找新的东西,我选择了 Scala,因为它与 Java 兼容,并且可能是从 OOP 到函数式编程的某种过渡。

很酷,学习新范式、新风格和新思维方式。阅读优雅的 Scala 概念是很棒的体验,而且在 Scala 上编写代码要好得多。

阅读了很多我遇到的文章this批评 Scala 的文章:

Scala is not a functional programming language. It is a statically typed object oriented language with closures.

看了这篇文章后,我产生了一些疑问,我真的很喜欢 Scala,并且开始更多地写 Scala,但是 Scala 适合函数式编程的定义吗?那篇文章是说真话还是只是假装读者?我必须学习 Haskell 或其他函数式编程语言才能真正体验 FP 吗?

更新:期待合理的答案,提供好的例子,不会引起争议。

最佳答案

Scala 不会强制您以函数式风格编写代码。这是完全有效的 Scala:

var i = 1
while (i < 10) {
println("I like side effects, this is number "+i)
i += 1
}
case class C(var i: Int, var set: Boolean = false)
def setMe(c: C) = { if (!c.set) { c.set = true; c.i += 1 }; c }
setMe(C(5))

所以从这个意义上说,可怕的是,Scala 不是函数式的!大量副作用,可变状态——你可以在 Java 中做的所有事情都可以在 Scala 中做。

尽管如此,Scala 允许您以函数式风格编写代码,并以多种方式让您的生活更轻松(比使用 Java):

  • 有一流的功能
  • 有一个不可变的集合库
  • 支持尾递归(在 JVM 可以管理的范围内)
  • 支持模式匹配
  • (等)

这看起来更实用:

for (i <- 1 to 10) println("Sometimes side effects are a necessary evil; this is number"+i)
case class C(i: Int, set: Boolean = false)
def setIt(c: C, f: Int=>Int) = C(f(c.i), true)
setIt(C(5), _+1)

值得注意的是,那篇文章的作者似乎对 Scala 的理解很差;几乎每一个在他手中看起来丑陋的例子都是不必要的丑陋。例如,他写道

def x(a: Int, b: Int) = a + b
def y = Function.curried(x _)(1)

但如果你注意你在做什么,那就没那么糟糕了:

def x(a: Int)(b: Int) = a + b
val y = x(1) _

无论如何,最重要的是 Scala 不是一种纯粹的函数式编程语言,因此,它的语法并不总是适合函数式编程,因为还有其他考虑因素在起作用。然而,它确实具有函数式编程语言所期望的几乎所有标准特性。

关于java - Scala 是函数式编程语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166155/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com