定义变量
定义变量时,不用指字类型,系统会自动进行类型推断。这一点好像已经成为现在新出语言的标配,使用关键字:
- var: 定义的变量可以再修改值
-
val: 定义的变量不可以再修改,相当于Java中用final修饰的。在FP的偏程风格中,更多推荐使用val
可以在命令行中,键入scala。 试着定义几个格式:
val result = 8+2 result:Int = 10 val str ="hello" .
你就可以看到参数的类型,这是系统自动为你推断的。
常用类型
scala是一个纯粹的学院派OO语言,它认为Java中的基础数据类型这些是一些不纯粹的OO概念,是一些妥协。因为,scala中没有基础数据类型。所有东西都是类,都是对象。8种java基础数据类型分别对应scala中的类型:Byte,Char,Short、Int、Long、Float、Double、Boolean。注意,这些都是类
算术和操作符重载
因为Scala中所有的东西都是类,因为所有的操作都是方法(或者函数),类似于
val sum = 1 + 2
实质上调用了"+()"方法,等同于如下代码:
val sum = 1.+(2)
对于有2个参数的方法,往往都可以用这种格式。用方法调用的格式,那是JAVA程序员的习惯,不过既然是学习Scala,我们还是建议采用Scala的格式。再举个例:
1.to(10)这是JAVA的风格,但是scala更偏向于
1 to 10
既然操作符都是方法,那么自然可以进行重载。
值得注意的是:scala没有++,--这种操作。取而代之的是+=1,-=1
apply()方法
"Hello"(4) //产出'o'这可不是构造函数,这实质上scala的一个语言糖,其实是调用了apply()。以上代码相当于
"Hello".apply(4)
关于这个方法我们留到后面讲伴生对象的时候再讲,此处留下悬念。
关于API以及一些工具类
首先scala的API很难读,比起JAVA那真是难读百倍。但是还是要试着去看,有几个小窍门
- 数值类型去RichInt、RichDouble,字符串去StringOps找方法
- 数学操作函数位于scala.math包中
- scala中函数是可以做为参数的