是什么让Scala具有可扩展性
一种语言的可扩展性受到一些因素的影响,从语法细节到组件抽象结构。Scala之所以具有可扩展性,主要是因为它是 面向对象和函数式编程 的结合 。 它对这两种编程结构都有很好的支持,比如高阶函数、尾随调用优化、不可变的值、模式匹配、多态性、抽象、继承等。Scala还包括自己的解释器,可以用来直接执行指令,而无需事先编译。另一个关键特征是 并行集合 库,旨在帮助开发人员解决并行编程模式。
另一些特征如下:
- Scala很简洁。它对后端操作提供了更好的支持。与Java相比,Scala程序往往短到10倍之多。它避免了为了得到某些结果而反复出现的代码,这些代码会给Java程序带来负担。
例如: 在Java中,一个带有构造函数的类看起来像:
class Geek
{
// data members of the class.
String name;
int id;
// constructor would initialized data members
// with the values of passed arguments while
// object of that class created.
Geek(String name, int id)
{
this.name = name;
this.id = id;
}
}
- 在Scala中,它将被写成。
class Geek(name: String, id: Int) {}
- Scala通过让我们提高设计接口的抽象程度来帮助你管理复杂性。Java将字符串视为低级别的实体,在循环中逐个字符进行处理。Scala代码将相同的字符串视为更高层次的字符序列,可以进行查询。Scala提供了开发框架和库的便利。
例子: 在Java中,要找到第一个大写字母。
// Function to find string which has
// first character of each word.
static char first(String str)
{
for (int i = 0; i < str.length(); i++)
if (Character.isUpperCase(str.charAt(i)))
return str.charAt(i);
return 0;
}
- 在scala中,它将被写成:
val first = str.exists(_.isUpperCase)
-
在Java代码中,字符串是低级别的实体,而在Scala中,同样的字符串被当作高级别的实体。在Scala中 _.isUpperCase 是一个函数字面。
-
Scala支持静态类型,在静态类型中,计算形成的语句在编译时就会改变程序状态。这是一种可以提供改进的运行时效率的方法。通过它们持有和计算的值,静态类型系统对变量和表达式进行分类。一个很像Java的嵌套类类型的系统,它允许我们用泛型来参数化类型,用抽象类型来隐藏细节,并通过使用交集来组合类型。
- 它是在Java虚拟机(JVM)上实现的,所以它可以访问所有的Java方法和字段,继承Java类并实现Java接口。它不需要任何特殊的语法,明确的接口描述,或胶水代码。它使用Java的类型,并把它们打扮得更漂亮。Scala编译器将程序编译成.class文件,其中包含可由JVM执行的字节码。Scala可以使用Java SDK中所有的类。在Scala的帮助下,用户可以对Java类进行自定义。