第一章 基础
声明和变量
-
在Scala中,我们鼓励你使用val--除非你真的需要修改它的内容。注意:你不需要给出值或者变量的类型,这个信息可以从初始化它的表达式推断出来,声明值或者变量但不做初始化会报错。
- val name="jacklee"//name值不可变,为String类型
- var age =18 //age值可变,根据初始化的值自动判定为Int
- var greeting:String =null //在必要的时候可以在声明变量时指定类型,初始化为null。
在scala中,变量或函数的类型总是写在变量或函数的后面,这有别于Java。
在Scala中,仅当同一行代码中存在多条语句时才需要用分号分开。
-
可以将多个值或者变量放在一起声明:
- val xmax,ymax =100 //将xmax 和ymax设为100
- var greeting,message:String=null //greeting和message都是字符串,被初始化为null。
常用类型
- 和Java一样,Scala也有7种数值类型:Byte,Char,Short,Int,Long,Float,Double 和一个布尔类型:Boolean。和Java不同的是,这些类型都是类,Scala没有区分基本类型和引用类。
- 在Scala中,我们不需要包装类型,在基本类型和包装类型的转换时Scala编译器的工作,比如我们创建一个Int型数组,最终在虚拟机得到的是int[]数组。
- Scala用底层的Java.lang.String类来表示字符串,不过它通过StringOps类给字符串追加了上百种操作.
- 比如:"Hello".intersect("world") //输出为"lo"
- 在这个例子中,String类型的"Hello"先被隐式转换为StringOps类型,然后调用intersect()方法。
- 在Scala中我们用方法而不是强制类型转换,来做数值类型之间的转换。比如:99.66.toInt输出99。99.toChar输出'c',toString输出字符串。
算法和操作符重载
- Scala的算术操作符和你在Java和C++预期的效果是一样的:val answer=88+6 得到answer为70.+-/%等操作都是正常的工作,位操作符也是一样的工作,但是在Scala中这些操作符实际上是方法。如:a+b实际是:a.+(b)的简写。这里的+是方法名。
- 通常来说,你可以用 a 方法 b 来作为 a.方法(b)的简写。
- 比如:1.to(10)可以简写为1 to 10。
- 和Java和C++相比,Scala有一个显著的不同,Scala并没有提供++和--操作,我们需要使用+=1或者-=1,比如 counter +=1 //将counter+1
调用函数和方法
- import Scala.math._ //在Scala中,_是通配符,相当于Java中的*
- 注意:使用以scala.开头的包是,我们可以省去scala前缀,比如 import scala.math._ 等同于 import math._。
- 不带参数的Scala方法通常不带括号,如:"Hello".distinct //输出为Helo。
- apply方法:比如:"Hello"(4) //将输出'o'实际上是:"Hello".apply(4)的简写。你可以把这种用法当做是()操作符的重载,它背后的原理是名为apply的方法。
- 再比如:Array(1,4,9,16)返回一个数组,用的就是Array伴随对象的apply方法。