来自Java的一系列内容我们现在很乐意在Scala之后告别

use*_*855 5 scala

我想要一个表格列出Java的历史记录,以及Scala的哪些功能已被替换.

我必须承认我是Scala的新手,所以我不能做出太多贡献.但我觉得,这个列表对我和其他人都有帮助,可以完全理解Scala

例如,我们使用关键字"val",这使得值在初始化后不可变.在Java中,我们必须键入对象的类型以及关键字final.斯卡拉让我们摆脱了这种痛苦.

在Scala中,并发支持显然更好,但我不是在寻找它.这是一个太大的好事,被忽略了.我正在寻找更精细的细节,尽管微不足道会产生良好的效果.

一些领域是:类型系统,异常处理,正则表达式,OOPS功能,语法糖等.

Fab*_*eeg 8

我喜欢的一件事是能够写出类似的东西:

case class Person(name: String, age: Int)
Run Code Online (Sandbox Code Playgroud)

代替:

class Person {

  private String name;
  private int age;

  public Person(String name, int age) {
    this.name=name;
    this.age=age;
  }

  public String getName() {
      return name;
  }

  public int getAge{
      return age;
  }

  public String toString() { 
      return String.format("Person(%s, %d)", name, age);
  }

  public boolean equals(Object other) {
      if (other == this) 
          return true;
      if (other.getClass() != getClass())
          return false;
      Person p = (Person) other;
      return getName().equals(p.getName()) && getAge().equals(p.getAge());
  }

  public int hashCode() {
      int h = getName().hashCode();
      h = 37 * h + getAge(); //or whatever it is!
      return h;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你忘记了吸气剂!使它成为`case class`,你也可以在那里得到`equals`,`hashCode`和`toString`! (2认同)

Tho*_*ung 6

  • 在Scala中,Null(大部分)已经消失了
  • 表达方式
  • 协变和逆变定义方泛型
  • 中缀运算符/方法(a + b,list map f)
  • 模式匹配
  • 隐式类型转换
  • 静态消失了(带对象)
  • 强大的包支持(嵌套包)

但是,因为每个功能都有它们的含义,它是设计的一部分,何时使用:

  • for expression vs map/flatMap/filter/...
  • 模式匹配与多态
  • 中缀vs方法调用语法

何时使用隐式类型转换和泛型.

没有什么是免费的.Scala是一个强大的工具,所以你可以伤害自己.


Kal*_*see 0

我喜欢这样一个事实:函数现在是对象,并且默认情况下包装了原语。编译器智能推断类型的能力也很好。