<!----><!---->
2. <!---->一种类似 Java 的语言
Scala 被设计成为可以与主流平台很好的交互,包括 Java 和 C# 。因此其绝大部分的基本操作符、数据类型和控制逻辑都与这两种语言相同。为简单起见,后面我们仅将 Scala 与 Java 作对比,由于 Java 与 C# 本身就有很多共同点,因此 Scala 绝大部分与 Java 的相似之处都可直接应用于 C# 。其实有些情况下 Scala 甚至更接近 C# ,例如对泛型的处理方面。
表 1 列出了 Java 和 Scala 实现同样功能的两段程序,都是打印出程序命令行包含的所有选项。
<!----><!----><!---->
// Java
class PrintOptions {
public static void main(String[] args) {
System.out.println("Options selected:");
for (int i = 0; i < args.length; i++)
if (args[i].startsWith("-"))
System.out.println(" " + args[i].substring(1));
}
}
// Scala
object PrintOptions {
def main(args: Array[String]): Unit = {
System.out.println("Options selected:");
for (val arg<-args)
if (arg.startsWith("-"))
System.out.println(" "+arg.substring(1))
}
}
|
表 1 : Scala 与 Java 程序示例
这个示例显示出两种语言很多相似性:他们都有 String 这种基本类,调用同名的方法,使用同样的操作符、同样的条件控制结构等。示例同时也体现两种语言的差异,包括:
- <!---->Scala 除类定义之外,还有对象定义的概念(以 Object 开头)。对象定义实际上是定义了一个只有单个实例的类,也就是通常所说的单例( singleton )。在上例中, PrintOptions 这个单例类有一个名为 main 的成员方法。
- <!---->Scala 采用“名称:类型”的方式进行变量定义和参数传递,而 Java 是使用类型前缀的形式,也就是“类型 名称”。
- <!----><!---->Scala 的语法比 Java 的相对更规范:所有的定义都由一个关键字开始,如上例中的 def main ,开始定义一个方法。
- <!---->Scala 不强制要求语句结束使用分号,分号是可选的。(原文中 Java 语句也没有分号,明显是错漏; Scala 两个语句都没有分号,我特意加了一个,更体现原意,当然是确保编译和运行正确的情况下——译注)
- <!---->Scala 没有特定语法来描述数组类型和数组的存取,一个元素类型为 T 的数组用 Array [T ] 来表示。这里 Array 是一个标准的类,而 [T ] 是一个类型参数。实际上, Scala 的数组是继承自函数的,因此数组存取形式就像函数调用 a(i ) ,而不是像 Java 的 a[i ] 。数组将在 4.3 节进一步讨论。
- <!---->main 函数的返回类型是 unit , Java 中是 void 。这种处理源自于这样一个事实: Scala 中语句和表达式没有区别。每一个函数都返回一个值,如果一个函数的右侧是一个 block ,那么这个 block 的最后一个表达式的求值将作为其返回值。 Unit 类型的返回值可能是一个平凡值 {} 。其他的控制结构,如 if-then-else 等,也被泛化为表达式。
- <!---->Scala 采纳了 Java 绝大部分控制结构,但不包含传统的 for 语句。作为替代, Scala 包含 for-comprehensions ,它允许直接遍历数组、列表、迭代器等数据结构而无需使用索引。 Java 5.0 也包括了扩展的 for 循环,有点类似于 Scala 的 for-comprehensions ,但要严格很多。(一般还有文章对于 list-comprehensions 进行翻译或者探讨翻译的方式,目前尚未有结论。而 for-comprehensions 这种语法结构的名词还没有在其他语言中看到,因此暂不作任何翻译的尝试了——译注)
尽管语法上存在差异, Scala 程序和 Java 程序进行互操作没有任何困难。如上例所示 , Scala 程序调用了 String 类的 startWith 和 substring 方法,而这里的 String 是一个 Java 类。它还访问了 Java 的 System 类的 out 这一静态属性,并且调用其经过重载的 println 方法。实际上 Scala 的类根本没有静态成员这一概念,但是上述调用仍然成为可能,这是因为每一个 Java 类在 Scala 中对应两个实体:一个是包含了所有动态成员的类,一个是包含了所有静态成员的单例对象。因此 System.out 这一属性是通过 Scala 的 System 这个单例对象来访问的。
此外,上例中并未描述的是, Scala 的类 / 对象还能够继承 Java 类或实现 Java 定义的接口,这使得在 Java 框架中调用 Scala 代码成为可能。例如,一个 Scala 类可以实现 Java 的 java.util.EventListener 接口,从而使该 Scala 类的实例可以接收到 Java 代码发出的事件。
分享到:
相关推荐
Scala是一种在2001年由洛桑联邦理工学院(EPFL)的编程方法实验室研发的语言,由Martin Odersky创建。它结合了面向对象和函数式编程的特性,旨在提高开发效率、应用程序的可扩展性和可靠性。 Scala与Java的关系密切...
Scala是一种现代的多范式编程语言,它结合了面向对象编程和函数式编程的特点。Scala的设计目标是解决Java等传统面向对象语言在扩展性和灵活性方面的局限性,同时保持与现有Java生态系统的高度兼容性。 #### 二、...
Scala作为一种融合了面向对象和函数式编程特性的语言,不仅提供了强大的编程能力,还确保了与Java的高度兼容性。通过不断的发展和完善,Scala已经成为了一个功能强大、易于使用的编程语言,适用于各种应用场景,无论...
Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种更高级别的抽象,使代码更加简洁、优雅。由于其与Java虚拟机(JVM)的紧密集成,Scala程序可以直接在Java平台上运行,这也是它被标记...
Scala是一种静态类型的编程语言,其设计旨在结合面向对象编程和函数式编程的优点,并且能在Java虚拟机(JVM)上运行。这意味着Scala能够充分利用现有的Java类库,并且能够与Java代码无缝集成。Scala不仅支持面向对象...
Scala 是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行于 Java 平台(Java 虚拟机),并兼容现有的 Java 程序。 目标 1. 熟练使用 Scala 编写 Spark 程序 2. 动手...
Scala是一种静态类型的编程语言,设计用于Java平台上,旨在提供一种简洁且强大的编程体验。它融合了面向对象编程与函数式编程的最佳特性,使得开发者能够在编写高效、可维护的代码时,拥有更多的灵活性。Scala的目标...
Scala 语言是一种现代的、多范式的编程语言,设计目标是提供一种可以与 Java 语言无缝集成的语言。Scala 语言的诞生是为了解决 Java 语言在大型项目中的不足之处,例如代码冗长、不够灵活等问题。 2. Scala 语言的...
#### 二、Scala概述 ##### 2.1 什么是Scala Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行...
- **静态类型**:Scala是一种静态类型语言,这意味着编译时就可以检测到类型错误,有助于提高代码质量。 #### 三、Scala教程章节概述 **第1章:可伸展的语言** - **关键概念**: - 可伸展性:Scala语言设计允许...
Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的编程体验。在这个电子书集合中,我们有三本关于Scala的重要书籍,分别是"Scala Tutorial"、"Programming in ...
Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming, FP)与面向对象编程(Object-Oriented Programming, OOP)的特点,使得...
Scala是一种运行在Java虚拟机(JVM)上的多范式编程语言,它支持面向对象编程和函数式编程两种编程范式。由于Scala是在JVM上运行,因此它可以无缝地与其他基于JVM的语言(如Java)进行交互。 #### 三、Scala的关键...
Scala是一种多范式编程语言,结合了面向对象编程和函数式编程的特点,运行在Java平台(JVM)上。它既能够提供静态类型检查的安全性,又能实现动态语言的灵活性。Scala的设计目标是解决Java的一些局限性,同时保持与...
Scala是一种融合了面向对象编程和函数式编程特性的多范式编程语言。 #### 四、部分内容 - **出版社信息**: - **出版商**:MANNING出版社。 - **出版时间**:2013年。 - **版权说明**:书中提到所有权利均受...