Scala是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在JVM之上的语言,语法简洁、优雅、灵活。Scala拥有一套复杂的类型系统,Scala方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。这些这是它的一部分特性。
为什么选择Scala
- 运行在JVM和JavaScript之上的语言
-
静态类型
Scala修正了Java类型系统中的一些缺陷,此外通过类型推演免除了大量的冗余代码
-
混合式编程范式——面向对象编程
Scala完全支持 面向对象编程(OOP)。Scala引入特征(trait)改进了Java的对象模型。trait能通过使用混合结构(mixin composition)简洁地实现新的类型。在Scala中一切都是对象,即使是数值类型。
-
混合式编程范式——函数式编程
Scala完全支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。
-
复杂的类型系统
通过使用类型推演,Scala编写的代码能够和动态类型语言编写的代码一样简洁。
- 简洁、优雅、灵活的语法
- 可扩展的架构
关于Java 8
Java 8引入的新特性:
- 匿名函数,Lambda表达式
- 改进了接口,允许为声明的方法提供默认实现
使用Scala
脚本设计的初衷是为了简化代码,无须将声明(变量和函数)封装在对象中。将Java和Scala代码编译后,声明必须封装在对象中(这是Java字节码的需求)。scala命令通过将脚本封装在一个你看不到的匿名对象中解决了冲突。
Scala的变量名和方法名中允许出现尖括号<>
,而Java中不允许标识符中出现这样的字符。为了避免出现歧义,Scala使用方括号而不是尖括号表示参数化类型,并且不允许标识符中出现方括号。
对于大多数面向对象编程语言而言,方法是指的类或者对象中定义的函数。
// src/main/scala/progscala2/introscala/upper2.sc
object Upper {
def upper(strings: String*) = strings.map(_.toUpperCase())
}
println(Upper.upper("Hello", "World!"))
在第1行中,Upper被声明为单例对象,Scala将单例模式视为本语言的第一等级成员。
在第2行中,函数体定义省略了返回值。由于方法体中仅包含一句表达式,因此可以省略括号。Scala大多数情况下能够推断出方法的返回值类型。递归函数是个例外,由于它的执行域超过了函数体的范围,因此必须声明返回值类型。