【问题标题】:Why does Scala has it's own inbuilt libraries?为什么 Scala 有自己的内置库?
【发布时间】:2019-01-03 00:28:07
【问题描述】:

我刚开始使用 Scala,想知道如果 Scala 真的可以与 Java 互操作,为什么他们拥有自己的一组库而不只是使用 Java 库?

换句话说,用 Scala 编写与 Java 相同的库有什么好处吗?

接下来,两者都被转换为字节码并在 JVM 上运行。

【问题讨论】:

  • 他们可以,但它可能不适合该语言。不同风格的库在不同语言中效果更好。
  • 我认为区别在于java是OOP,scala是函数式语言,它基于lamda calculas,而java是基于类和对象的概念。在 Scala 中,一切都是函数(除了数据类型),在 Java 中,一切都是对象。所以相同功能的实现之间应该存在内部差异。

标签: java scala functional-programming


【解决方案1】:

如果您阅读scala documentation

Scala 将面向对象 (OOP) 和函数式编程 (FP) 合二为一 简洁的高级语言。

  • 在我看来,scala 获得了 JVM 市场,因为在 java8 之前,java 曾经只是 OO;而你可以在scala中同时做OO + fp。

  • 由于 fp 鼓励诸如不变性之类的想法,因此使用相同的 Java 库并不理想,因为 Java 不提供不变性或没有被实践

    这就是为什么您会看到工程师使用惯用的 scala 重写或移植 JVM 库的原因;也叫pure fp,而不是调用不纯代码。

这是 scala 不变性的示例;

scala> case class Customer (name: String)
defined class Customer

scala> val customer = Customer(name = "Stephen")
customer: Customer = Customer(Stephen)

scala> customer.name = "Lino"
<console>:13: error: reassignment to val
       customer.name = "Lino"
                     ^

java10 现在提供了一些不可变的数据结构,例如ListMap

使用final的java不可变示例;

jshell> class Customer { final String name = "default customer"; }
|  created class Customer

jshell> var customer = new Customer()
customer ==> Customer@887af79

jshell> customer.name = "Lino"
|  Error:
|  cannot assign a value to final variable name
|  customer.name = "Lino"
|  ^-----------^

Twist:由于 java 变得越来越实用,我不知道 scala 会用他们的 OO + FP 哲学做什么?

【讨论】:

  • “Java 不提供不变性。” - 嗯......确实如此。一些 Java 类型是不可变的,您可以定义自己的不可变类型。但是 Java 没有办法将不变性作为内在类型系统属性来强制执行。 (它是类型的字段和方法的一个紧急属性......)请注意,您的示例可以通过声明变量 final 在 Java 中实现。
  • 您展示的示例不是不变性,不变性禁止修改变量的状态。你只是想重新分配一个只读变量。
  • 正确,据我所知,java 现在在 java10.0.1 var cities = List.of("seattle", "portland", "perth") 中提供了一些变量定义的不可变数据结构示例。
  • (该功能自 Java 1.2 以来一直在 Java 中使用 Arrays.asList。这不是新东西......)
  • @Lino 在示例中,我只是试图显示变异引用。 @Stephen 感谢纠正 java8 中的不可变 Map + var mountains = Map.of(1, "Everest", 2, "Annapurna")
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2021-02-07
  • 2019-12-16
  • 2020-05-17
  • 1970-01-01
  • 2020-09-22
  • 2012-11-06
相关资源
最近更新 更多