Scala的语言相对来说还是比较复杂的,所以我打算将Scala拆分成两部分来说,第一部分是传统的C类语言的结构,类,函数变量,控制语句,第二部分是Scala与其他C类语言不通的地方及特点,这样的好处是可以让大家迅速了解Scala的基本操作,但是坏处是大家可能忽视掉后面的函数式的思想,纠结啊
关于类,字段和方法的定义,其实基本上与Java相似,但是却也有着一些区别。
类:
Scala中的类依然是使用class关键字,定义一个类与Java,C#没什么太大的区别,例如:
class Class1{
// 一些东西
}
与其他语言不同的是,Scala中,默认的访问符是 public,即如果你不明确的写明private或其他访问符,则类里的成员默认都是可以公开访问的。
同时Scala中没有static的类,但是他有一种类似的伴生对象,稍后会介绍。
字段:
字段/变量的定义Scala中使用 var/val 变量/不变量名称 : 类型的方式进行定义,例如:
var index1 : Int = 1
val index2 : Int = 1
其中var 与 val 的区别在于,var 是变量,以后的值还可以改变, val的值只能在声明的时候赋值,但是val不是常量,只能说是不变量或只读变量,与C#中的readonly的变量有点相似,例如:
index1 = 2 // OK
index2 = 2 // Error 编译错误
var index1 = 1
val index2 = 1
当然,将函数的返回值赋值给字段时也是可以自动推断的。
其实根据函数式编程思想中,var变量是个不好的存在,Scala中推荐大家尽可能的采用val的不变量,主要原因是因为val的不可变有助于理清头绪,但是相对的会付出一部分的性能代价。
函数:
Scala中的函数定义与其他的C类语言也不太一样,例如:
def max( x : Int, y : Int) : Int = {
if(x > y)
{
return x
}
else
{
return y
}
}
其中def 是函数定义关键字 max 是函数名,
x, y 是参数,参数类型是Int,并且是val即不可变的,最后的 : Int是返回值类型
嗯,写法很麻烦,看样子可以优化,首先是return ,Scala中,可以不写return,如果不写return 则自动将最后计算的结果作为返回值,如果没有返回值,则函数的返回类型为Unit,类似于Java和C#中 void。
def max( x : Int, y : Int) : Int = {
if(x > y) x else y
}
接着,变量可以推断返回类型,所以函数也可以,嗯,我们可以简写成:
def max( x : Int, y : Int) = {
if(x > y) x else y
}
好吧,现在函数只剩一行了,这种时候,我们连大括号都可以省略了 ╮(╯▽╰)╭
最后简化成:
def max( x : Int, y : Int) = if(x > y) x else y
相对于第一个版本简洁了相当多吧,在除了最后一个版本的函数声明中,都可以把 = 号省略掉,加 = 是为了表示,函数与字段一样都是头等公民,函数是头等函数,这些东西后面会介绍。
=====解释器跨行代码=============================================
再解释器中,我们经常会写一些比较长的代码,然后这些代码跨行了,这种时候,我们可以使用 | 作为换行符继续编写代码,例如:
val msg = |
"Hello world"
同样我们也可以使用两个 | 来撤销之前的代码,例如:
val oops =
|
|
这种时候,将撤销对 oops的声明