如果你之前是一名Java程序员,了解Java语法的基础知识,那么你将能够很快学会Scala的基础语法。Scala与Java最大的区别是:Scala语句末尾的分号【;】是可选的。我们可以认为Scala程序是对象的集合,通过调用彼此的方法来实现消息传递。接下来我们来理解下:类、对象、方法、实例变量的概念:
- 对象:对象有属性和行为。例如:一只狗的属性有:颜色、名字,行为有:叫、跑、吃等。对象是一个类的实例。
- 类:类是对象的抽象,而对象是类的具体实例。
- 方法:方法是用来描述行为的,一个类可以包括多个方法。
- 字段:每个对象都有它唯一的实例变量集合,即字段,对象的属性通过给字段赋值来创建。
1.运行Scala程序
1.1交互式编程
交互式编程不需要创建脚本文件,可以通过以下命令调用:
C:\Users\Administrator>scala
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171).
Type in expressions for evaluation. Or try :help.scala> println("Hello Scala !")
Hello Scala !scala>
1.2脚本形式
新建一个HelloScala.scala的文本文件,内容如下:
object HelloScala{
def main(args:Array[String]){
println("Hello Scala !")
}
}
使用scalac命令编译,编译后产生.class文件,并使用scala命令运行(是不是跟Java很类似):
Scala>scalac HelloScala.scala
Scala>scala HelloScala
Hello Scala !
Scala>
2.基本语法
Scala的基本语法需要注意以下几点:
- 区分大小写:Scala语言是大小写敏感的,这意味着标识符Hello和hello在Scala中是不同的。
- 类名:对于所有的类名的首字母要大写。如果需要使用多个单词来构成一个类名,每个单词的首字母要大写。
- 方法名称:所有的方法名称的首字母要小写。如果需要使用多个单词构成一个方法名称,每个单词的首字母要大写。
- 程序文件名:程序文件名应该与对象名称完全匹配。保存文件时,应该保存它使用的对象名称,以.scala作为扩展名(如果文件名和对象名称不匹配,程序将无法编译)。
- def main(args:Array[String]):Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。
3.标识符
Scala开始使用两种形式的标识符:字符数字和符号。
字符数字标识符使用字母或者下划线开头,后面可以接字母或者数字。符号””开头的标识符作为保留的Scala编译器产生的标识符使用,应用程序应该避免使用”$”开头的标识符,以免造成冲突。Scala的命名规则采用和Java类似的”骆驼”命名法,首字母小写,但是类名首字母大写。此外也应该避免使用以下划线结尾的标识符。
符号标识符包括一个或多个符号,如加号[+],冒号[:],问号[?]等等,如:+,++,:::,<?>,:->等等。
Scala 内部实现时会使用转义的标志符,比如:->
使用 \$colon\$minus\$greater
来表示这个符号。因此如果你需要在 Java 代码中访问:->
方法,你需要使用 Scala 的内部名称\$colon\$minus\$greater
。
混合标志符由字符数字标志符后面跟着一个或多个符号组成,比如 unary_+
为 Scala 对+
方法的内部实现时的名称。字面量标志符为使用''
定义的字符串,比如 x
yield
。
你可以在''之间使用任何有效的 Scala 标志符,Scala 将它们解释为一个 Scala 标志符,一个典型的使用为 Thread 的 yield 方法, 在 Scala 中你不能使用 Thread.yield()是因为 yield 为 Scala 中的关键字, 你必须使用 Thread.yield
()来使用这个方法。
4.Scala关键字
下图列出了Scala保留关键字,我们不能使用以下关键字作为自定义标识符:
5.Scala注释
Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。注释在 Scala 编译中会被忽略,实例如下:
object HelloWorld{
/* 这是
* 一个
* 多行注释
*/
def main(args: Array[String]) {
// 这是一个单行注释 println("Hello, world!")
}
}
6.空行和空格
一行中只有空格或者注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割。
7.换行符
Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 语句末尾的分号通常是可选的。如果你愿意可以在每条语句末尾都加上分号;如果一行里仅 有一个语句也可不加分号;如果一行里有多个语句,那么中间的分号是需要的。例如:
val s = "Hello Scala"; println(s)
8.Scala包
8.1定义包
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:第一种方法和 Java 一样,在文件的头部定义包名,这种方法就表示后续所有代码都放在该包中。 比如:
package com.runoob class HelloWorld{
......
}
第二种方法有些类似 C#,可以在一个文件中定义多个包,例如:
package com.runoob1 {
class HelloWorld
}
package com.runoob2 {
class HelloWorld
}
8.2引用包
Scala 使用 import 关键字引用包。
import java.awt.Color // 引入Color
import java.awt._ // 引入包内所有成员
import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。
如果只想引入包中的几个成员,可以使用selector(选取器,就是大括号{}),例如:
// 引入java.awt包下的Color和Font类
import java.awt.{Color, Font}
// 引入java.util下包的HashMap类,并重命名为JavaHashMap
import java.util.{HashMap => JavaHashMap}
// 引入java.util包的所有成员,但是隐藏HashMap
import java.util.{HashMap => _, _}</pre>
注意:默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._,因此以scala开头的包,在使用时通常都是省去scala.的。