【问题标题】:“Thinking in Scala" if I have a Java/C++ background?如果我有 Java/C++ 背景,“在 Scala 中思考”?
【发布时间】:2015-09-11 13:00:51
【问题描述】:

我熟悉用 Java 开发服务器端应用程序,但现在我想开始使用 Scala。你能描述一下必要的范式转变吗?以下是一些可能有助于您找到答案的问题:

  1. 如何以不同的方式构建和设计 Web 应用程序?什么是 最大的不同?
  2. 我应该停止做什么/使用什么;我应该开始做什么/使用 而是?
  3. 是否有任何客户端注意事项/限制?

我不是在寻找 Java 和 Scala 之间的详细比较。

【问题讨论】:

  • 我尝试过通过与其他语言不同的方式来学习语言,但它从来没有为我工作过。现在从我正在学习的语言的初学者书籍开始。这就解释了你应该如何看待新语言。
  • @harshtuna - 由于过于宽泛,这将对程序员关闭。
  • @Amit “SO 不应该仅仅因为它的 PageRank 比其他博客渠道高就冒险托管博客文章。” “对社区有用不是理由......”
  • @harshtuna 是的,我对 meta 的回答在任何情况下都不应该有太大的分量:它被否决了,并且这个问题作为基于意见的问题被关闭了。所以......不是关于元共识的非常确凿的证据。我认为 Amit 可能在这里扮演魔鬼的拥护者,期望这个被关闭只是为了证明一个观点。不过,我希望这个请求是真实的,因为我不希望看到人们努力回答一个虚假的问题。 (我建议继续在元数据上继续讨论。)

标签: java scala architecture


【解决方案1】:

Scala 和 Java 的主要区别在于 Scala 对函数式编程的使用。

  1. 对于 Web 应用程序,您将使用不同的框架。 Play是目前最流行的口味。它感觉类似于其他框架中的 MVC 工作,但更倾向于功能纯度(尽管大多数 Play 应用远非纯粹)
  2. 您应该停止考虑内存中的可变字段,而应该考虑不可变值的数据流。不要使用var,当您可以使用val 时。循环将主要被更高阶的结构取代,如mapfold。避免使用空值,并改用Options。
  3. 假设是 Web 客户端,不。除非你想把 Scala 编译成 JS。然后同样的事情也适用。

明智地学习,我会从Twitter Scala school 开始,一旦你明白了,我推荐这本书Functional Programming in Scala。我认为这两个资源将引导您朝着 FP 方向发展,而不是使用新语法编写 Java 风格的程序。然后,在 OOP/FP 量表中找到适合手头问题的合适位置。

【讨论】:

  • 还有 Scala 的 coursera 课程,以及随后的反应式编程(在 Scala 中)。
  • 有趣的是,Scala 本质上是一门纯粹面向对象的语言,比 Java 更加面向对象和纯粹。对函数式编程的关注实际上不在语言上,而是在库和(最重要的)社区中。
  • 该语言有很多特性可以直接支持只有在函数式​​编程中才能找到的想法。 Monads,higher-kinded types,等等。所以 Scala 中的 FP 支持是经过深思熟虑的,而不是社区的副作用(双关语)。 OO 和函数式编程是正交的,Scala 支持两者一起工作。但是很多面向可变性的 OO 实践和模式都消失了
  • 我并不是说 Scala 中的 FP 是偶然的。恰恰相反,这是对 Martin Odersky 天才的难以置信的证明,他设计了一种语言,它可以很好地适用于如此多不同风格的编程,而语言结构却如此之少。例如,将功能、对象和模块统一到一个结构(对象)中。高级类型与类型安全和抽象有关,monad 也是如此。抽象并不是 FP 独有的,它实际上也是 OO 的核心,类型安全是任何类型语言的目标,无论是 FP 还是 OO。真的,函数字面量和……
  • ...apply 语法糖是 FP Scala 的唯一功能。其他所有内容都在库中:FunctionN 特征,对引用透明性的关注,所有像 map 这样的方法都将函数作为参数。我发现这种语言设计方法令人耳目一新,而不是一个又一个的功能。
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 2016-02-03
  • 2016-08-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2013-04-08
相关资源
最近更新 更多