【《快学Scala》笔记】编程
1、基础数组
一、变量
val 标志符: 声明常量; 如,val answer = 1
var 标志符:声明变量; app
鼓励使用val;函数式编程
注:声明变量时不作初始化会报错。函数
1 val a:Int = 1 2 val str:String = 2
二、经常使用类型spa
Scala支持7种数值类型和1种Boolean类型。scala
注:全部这些类型都是类,Scala并未区分基本类型与引用类型。如,能够调用1.toString方法。3d
三、数值类型转换:code
Scala中使用方法,而非强制类型转换来作数值类型之间的转换。如,blog
四、操做符
Scala支持Java中绝大多数操做符,不过全部的操做符都是方法。如:
a+b 是 a.+(b) 的缩写
即:a 方法 b 是 a.方法(b) 的缩写,两种写法能够互换。
【注:Scala不支持 ++ 和 -- 操做符。】
五、函数调用和方法
经常使用数学函数包括在scala.math包中,能够经过以下语句引入包。
1 import scala.math._ // Scala中,字符 _ 是通配符,相似Java中的*
另外,以scala开头的包,在引入或使用时能够省略scala。
1 import math._ 2 3 math.sqrt(2)
【注:Scala中没有静态方法。】
不带参数的方法在调用时能够省略括号,如:
1 "hello World".toString
六、apply方法
在Scala中一般使用相似函数调用的形式来访问数组、链表等的元素。如:
上述调用中,"hello"(0)是"hello".apply(0)的调用。其中apply方法是StringOps类中的方法。
2、控制结构和函数
一、if语句也有返回值
if语句称为条件表达式,如:
条件表达式的结构为: if( 判断条件 ) 值1 else 值2 ;结构相似于 Java的三目运算符,可是Scala不支持三目运算符。
该条件表达式能够用来初始化val常量。
注:Scala中每一个表达式都会返回值,如
条件表达式返回了 () ,其中 () 表示Unit类,表示没有值。能够看做Java中的void类型。
二、Scala不支持switch语句,可是Scala有更强大的模式匹配机制。
三、块表达式
Scala中使用 {} 括起来一系列表达式,其 {} 括起来包括 {} 的部分叫作块表达式,块表达式的值是块中的最后一个表达式的值。如,
,结果为7。
可使用块表达式为变量赋值,如:
变量distance使用块表达式来赋值,其值为块中最后一个表达式的值。
四、Scala中赋值语句的返回值为Unit,也可记做:Scala中赋值语句是没有返回值的。
【注: x = y = 3; 这种赋值形式在Scala中不支持,由于赋值语句在Scala中无返回值。 因此, += 、-= 、 ×= 、/= 等赋值操做符都是无返回值的。】
五、输入、输出
经常使用的包括readLine从控制台读取一行输入,另外,readLine还可带有提示字符串,如:
readInt、readByte、readDouble、readShort、readLong、readFloat、readBoolean、readChar分别用于读取各自类型的值。
print(内容)、println(内容)、printf; 其中println带换行;另外,printf支持C风格的字符串输出,如:
六、循环操做
Scala支持Java相同的while和do循环:
Scala的for循环结构:( for循环中,变量前面不带var或val标志符)
1 for( 变量 <- 表达式 ){ //让变量遍历表达式的全部值 2 3 //操做 4 5 }
如:
七、for循环的高级用法
1 for( i <- 1 until 3; j <- 1 until 3 ){ 2 println( i*j ) 3 }
for循环的这种结构相似Java中的嵌套循环结构。
另外,能够采用
1 for{ i <- 1 until 3 //使用大括号,使用换行来分隔组 2 j <- 1 until 3 }{ 3 4 println( i*j ) 5 }
if表达式是否添加括号,结果无变化。
until 返回一个不包含上界的区间,如 1 until 3 返回 (1,2);
to方法返回一个包含善洁的区间,如 1 to 3 返回(1,2,3);
若是for循环以yield开始,for循环会构造出一个集合,保存到集合中。
八、Scala并不支持break和continue;
九、函数—Scala支持函数式编程
1 def 函数名(参数1:类型1, 参数2:类型2,... ):返回值类型 = { 2 3 //函数体 4 5 }
例如:
【注:对于有返回值的函数,不能省略 等号 ; 对于递归函数,不能省略函数返回值类型。】
【注:无返回值的函数定义时能够省略 等号 ;无返回值的函数返回类型是 Unit;】
十、带默认值的函数
带默认值函数的声明,与Java中的带默认值的方法很相似。
十一、带名参数——在函数调用时经过明确指明参数与其对应值
第一个函数调用为普通调用,第二个函数调用为带名参数调用。
十二、长度可变的参数列表
经过在函数的形参列表最后一个参数的类型后,添加*,来定义一个接受任意多个参数的函数。
1三、过程,Scala中将没有返回值的函数叫作过程,如上图所示的函数。
过程在定义的时候,参数列表以后无等号。
1四、懒值
但val被声明为lazy时,变量的初始化将被延迟,直到咱们首次对变量取值。例如:
1 lazy val fileContent = scala.io.Source.fromFile("filename").mkString
只有当咱们读取fileContent值时,fileContent才会经过读取文件来进行初始化。若咱们一直未读取fileContent值,这文件不会被读取。
1五、Scala没有“受检”异常——无需声明函数或方法可能会抛出某种异常。