Scala基础语法
如果有很好的了解Java语言,那么将很容易学习Scala。 Scala和Java间的最大语法的区别在于;行结束符是可选的。考虑Scala程序它可以被定义为通过调用彼此方法进行通信的对象的集合。现在,简要地看看什么叫做类,对象,方法和临时变量。
-
对象 - 对象有状态和行为。例如:狗有状态 - 颜色,名字,品种,它有行为 - 摇摆,吠叫,吃东西。对象是类的一个实例。
-
类 - 类可以被定义为一个模板/蓝本以描述行为/指示其类型支持对象。
-
方法 - 方法本质上是一个行为。类可以包含许多方法。它是在将逻辑写入方法中,数据进行操作和所有动作被执行。
-
字段 - 每个对象都有其独特的一组临时变量,这是所谓的字段。对象的状态是由分配给这些字段中的值创建的。
第一个Scala程序:
交互式模式编程:
调用解释不通过一个脚本文件作为一个参数会显示以下提示:
C:>scala Welcome to Scala version 2.9.0.1 Type in expressions to have them evaluated. Type :help for more information. scala>
键入下列文字的Scala提示符,然后按Enter键:
scala> println("Hello, Scala!");
这将产生以下结果:
Hello, Scala!
脚本模式编程:
让我们来看一个简单的代码,用于打印简单的一句话:Hello, World!
object HelloWorld { /* This is my first java program. * This will print Hello World as the output */ def main(args: Array[String]) { println("Hello, world!") // prints Hello World } }
让我们来看看如何保存文件,编译并运行该程序。请按照以下的步骤:
-
打开记事本,并添加上面代码。
-
将文件保存为:HelloWorld.scala。
-
打开命令提示符窗口,然后转到保存程序文件的目录。假设它是 C:>
-
键入“scalac HelloWorld.scala”,然后按回车编译代码。如果代码中没有错误,命令提示符下将自动换到下一行。
-
上面的命令将在当前目录中生成几个类文件。其中一个名称为HelloWorld.class。这是一个字节码可以运行在Java虚拟机(JVM)。
-
现在,键入“scala HelloWorld”来运行程序。
-
可以看到“Hello, World!”打印在窗口上。
C:> scalac HelloWorld.scala C:> scala HelloWorld Hello, World!
基础语法
关于Scala程序,这是非常要注意以下几点。
-
区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。
-
类名 - 对于所有的类名的第一个字母要大写。
如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。
示例:class MyFirstScalaClass -
方法名称 - 所有的方法名称的第一个字母用小写。
如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。
示例:def myMethodName() -
程序文件名 - 程序文件的名称应该与对象名称完全匹配。
保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加“.scala”为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译)。
示例: 假设“HelloWorld”是对象的名称。那么该文件应保存为HelloWorld.scala“ -
def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。
Scala修饰符:
所有的Scala的组件需要名称。使用对象,类,变量和方法名被称为标识符。关键字不能用作标识符和标识是区分大小写的。Scala支持以下四种类型标识符:
文字标识符
字母数字标识符开始以字母或下划线,可以使用字母,数字或下划线。“$”字符在Scala中是保留关键字,标识符不能使用。以下是合法的字母标识符:
age, salary, _value, __1_value
以下是非法标识符:
$salary, 123abc, -salary
运算符标识
运算符识别符由一个或多个运算符字符。操作字符是可打印的ASCII字符,如+, :, ?, ~ 或#。以下是合法的运算符标识:
+ ++ ::: :>
Scala编译器将在内部“轧”操作符标识符使它们成为合法的Java标识符,并嵌入$字符。例如,所述标识符:->将内部表示为$colon$minus$greater。
混合标识符
混合标识符由一个字母数字识别符,随后是一个下划线和运算符标识。以下是合法的混合标识符:
unary_+, myvar_=
在这里,作为一个方法名unary_+定义了一个一元+运算符和myvar_=用来作为方法名称定义了一个赋值运算符。
立即数标识符
一个文字标识是包含在反引号(` . . . `)的任意字符串。以下是合法的文字标识:
`x` `` `yield`
Scala关键字:
下面的列表显示在Scala中的保留字。这些保留关键字不可以被用作常量或变量,或任何其他的标识符名称。
abstract | case | catch | class |
def | do | else | extends |
false | final | finally | for |
forSome | if | implicit | import |
lazy | match | new | null |
object | override | package | private |
protected | return | sealed | super |
this | throw | trait | try |
true | type | val | var |
while | with | yield | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
换行符:
Scala是面向行的语言,语句可以用分号(;)结束或换行符。分号在声明的结尾通常是可选的。可以键入一个想要的,如果语句出现其本身在一行。在另一方面,如果写在一行多个语句分号是必需的:
val s = "hello"; println(s)
Scala包:
包是一个代码命名的模块。例如,Lift 实用包net.liftweb.util。包声明是在源文件中的第一个非注释行,如下所示:
package com.liftcode.stuff
Scala的包可以被导入,使他们能够在当前编译范围内被引用。下面的语句是导入scala.xml包的内容:
import scala.xml._
可以导入封装的类和对象,例如,从scala.collection.mutable导入HashMap:
import scala.collection.mutable.HashMap
可以从一个单一封装的scala.collection.immutable包导入多个类或对象,例如,TreeMap和TreeSet:
import scala.collection.immutable.{TreeMap, TreeSet}