Scala学习笔记(四) - 变量,常量,函数及类的定义

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/val 名称 : 类型的声明方式太过于繁琐了,嗯,Scala作者也想到了,所以你在声明字段的时候,可以使用编译器自动推断类型,即不用写 : 类型,例如:

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的声明

你可能感兴趣的:(Scala)