初学Scala
由于项目的需要接触了Scala语言,也花了一些时间来了解和学习Scala,今天对学习的Scala进行一个小的总结。
1.What is Scala?
Scala的官方网站上给出的解释是:
Scala is an acronym for “Scalable Language”. This means that Scala grows with you.
Scala是“Scalable Language” 扩展性(可伸缩性)语言的缩写,是一门可以与你共同成长的语言。Scala的可扩展性(伸缩性)体现在你既可以用它来写一行简单的脚本来查看输出,也可以用它来构建庞大复杂的系统。在官网首页对Scala的描述是Object-Oriented Meets Functional,这也Scala具有可扩展性(伸缩性)的根本原因。
At the root, the language’s scalability is the result of a careful integration of object-oriented and functional language concepts
Scala是面向对象和函数式的集成。在Scala编程一书中,对象的描述如下:
原则上,面向对象编程的动机非常简单:除了最琐碎的程序之外的绝大多数都需要某些结构。做的这点最直接的办法就是把数据和操作放进某种形式上的容器。面向对象编程里最伟大的思想是让这些容器完全地通用化,
这样它们就能像保存数据那样保存操作,并且它们是自己的值,可以存储到其他容器里,或作为参数传递给操作。这样的容器就被叫做对象。
而Scala则是更加纯粹的面向对象语言:每个值都是对象,每个操作都是方法调用
Scala is a pure-bred object-oriented language. Conceptually, every value is an object and every operation is a method-call
同样Scala也具有函数式的特征,在Scala编程一书中,函数的描述如下
函数式编程有两种理念做指导,第一种理念是函数是第一类值。在函数式语言中,函数也是值,与,比如说,整数或字串,在同一个地位。
函数式编程的第二个主要理念是程序的操作符应该把输入值映射到输出值而不是就地修改数据。
2.Why choose Scala?
Scala在编程实现上具有很多特性,其中有四个特点是非常重要的:
1)Seamless Java Interop
Scala是兼容的,因为它被设计成无缝地与Java实施互操作。
Scala runs on the JVM. Java and Scala classes can be freely mixed, no matter whether they reside in different projects or in the same. They caneven mutually refer to each other, the Scala compiler contains a subset of a Java compiler to make sense of such recursive dependencies.
2)Scala是简洁的
Scala程序一般都很短。首先,Scala的语法避免了一些束缚Java程序的固定写法。例如,Scala里的分号是可选的,且通常不写。有助于Scala的简洁易懂的另一个因素是它的类型推断。重复的类型信息可以被忽略,因此程序变得更有条理和易读。
3)Scala是高层级的
Scala可以通过让你提升你设计和使用的接口的抽象级别来帮助你管理复杂性。例如,假设你有一个String变量name,你想弄清楚是否String包含一个大写字符。在Java里,你或许这么写:
// 在Java里
boolean nameHasUpperCase = false;
for (int i = 0; i < name.length(); ++i) {
if (Character.isUpperCase(name.charAt(i)))
{ nameHasUpperCase = true; break;
}
}
在Scala里,你可以写成:
val nameHasUpperCase = name.exists(_.isUpperCase)
4)Scala是静态类型的
静态类型系统认定变量和表达式与它们持有和计算的值的种类有关。Scala坚持作为一种具有非常先进的静态类型系统的语言