结构
学会使用Scala中主要的结构控制语句
数组
学会数组的声明与使用
映射
了解Scala中的映射的基础知识
包与引用
Scala控制结构
判断(if表达式)
循环(while/do语句)
枚举(for表达式)
匹配(match表达式)
异常处理(throw/try)
输出(print/println)
输入(readLine)
判断(if表达式)
检测语句是否为真,并执行之后的语句
if(A) B ; else C (“ ;”号能省略吗?)
A可以是任意返回布尔值的语句,或是布尔值的量,真则执行B,假则执行C;
当B为空时,可写成 if(!A) C
def min(x:Int,y:Int):Int={
var a=x
if(x>y) a=y
return a
}
if表达式能用以赋值
def min(x:Int,y:Int)= if(x>y) y else x
循环(while/do)
while语句包括状态判断与循环体,只要当前状态判断为真,就执行循环体一遍;然后
进行下一次状态判断,判断为假时终止循环。
while(A) B
do语句与while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续
执行循环体,否则终止循环。
do B while(A)
m -= 1 m=m-1; m+=1 m=m+1
var m=3 var m=3
while(m!=0){ do{
println(m) println(m)
m-=1 m-=1
} }while(m!=0)
枚举(for表达式)
For表达式能用任意条件进行各种形式枚举,而在枚举的过程中能实现绝大部分的循环
功能且不必使用变量。
for(i <- e) E(i)
for表达式包括发生器(i <- e)同函数体E(i),
发生器是遍历e中的元素,每一次枚举名为i的新的val就被初始化
对于每一次枚举,函数体E(i)都会执行一次,而其中的参数i由枚举时进行赋值
e可以是各种集合,包括数组、列、表达式等,或是有上下界的数值范围:
1 to 4 (1=<i<=4);1 until 4 (1=<i<=4-1)(不包含上界)
for(i <- 1 to 4)
println(“No.”+ i)
枚举(for表达式)
在for语句中使用if语句进行过滤
for(i <- e) if(A) E(i)
for(i <- 1 to 4)
if(i%2==0)
println(“No.”+ i)
for语句中能使用多个if语句进行过滤,if语句间不用“ ;” 间隔
for(i <- 1 to 4)
if(i%2==0)
if(i!=2)
println(“No.”+ i)
能把if语句写入循环体,而非函数体中,此时要使用“;” 间隔
for(i <- 1 to 4;if i%2==0;if i!=2)println(“No.”+i)
枚举(for表达式)
for语句实现嵌套枚举只需要多加一个<-字句
for(i <- 𝑒1)for(j <- 𝑒2)E(i,j)
for(i <- 𝑒1;j <- 𝑒2)E(i,j)
for(i <- 𝑒1;if A;j <- 𝑒2;if B)E(i,j)
嵌套枚举并非是同时进行的枚举;形如for(i <- 1 to 4;j <- 1 to 2),其枚举形式是,先
枚举i = 1,再完整枚举j = 1,j = 2;然后是枚举i =2,再完整枚举j = 1,j =2
循环体的<-语句顺序是影响循环结构
出于理解和阅读要求,对于较长的循环体或者函数体,可以进行分行
枚举(for表达式)
for语句除了对枚举值进行操作并释放该值外,可以用以赋值,即把每一次枚举的值记
录在集合中。
for(i <- e) yield E(i)
若E(i)由花括号括起,yield须在花括号外,即for(i <- e) yield {E(i)}
val No=
for(i <- 1 to 4)
yield i
yield保留字返回的类型跟for循环体第一个<-语句的集合类型相同,如非集合时,返回
的是序列
枚举(for表达式)
for(i <- “HELLO”)yield i
for(i <- 1 to 2)yield i.toChar
for(i <- “HELLO”;j <- 1 to 2) yield (i+j).toChar
for(i <- 1 to 2;j <- “HELLO”) yield (i+j).toChar
分别返回什么结果呢?
String:HELLO
Vector<?,?>
String:IJFGMNMNPQ
Vector<I,J,F,G,M,N,M,N,P,Q>
匹配 (match表达式)
匹配 (match表达式)
匹配语句case后接 _ 代表的是任意,一般在最后的case语句中这么写,即匹配不到上
面的值时,执行
如 a match {
case e1 =>...
case e2 =>...
case _ =>....}
匹配语句返回的值有多种类型时,Scala不能执行类型推断,并且只会返回Any类型
如 val final=a match {
case e1 => “HI”
case e2 => ‘H’
case e3 => 123 }
异常处理(throw/try)
Scala处理异常一般通过throw抛出一个异常并中止
要么捕获并处理该异常,要么简单中止之
异常抛出:throw new IllegalArgumentException
异常捕获与处理:try{函数体} catch{case…;case…}
异常捕获并中止:try{函数体} finally{A.close()}
try{函数体} catch{case…;case…} finally{A.close()}
throw、 try-catch-finally表达式都能生成值
如:throw new IllegalArgumentException(“Error!”)
def f():Int=try{1} finally{2}
输入输出
输出通常使用print或println函数,后者在输出内容后追加一个换行符
println(A) A可以是值、表达式等,如:
println(“A”) println(“A”+1)
当A是表达式时,输出的是表达式的运行结果
输入通常使用read函数,如readLine是从控制台读取一行输入,指定类型时为readT
,T是所要指定的类型,如readInt等
val name=readLine(“ Your name :\n” ) readLine带一个参数作为提示字符串
val age=readInt()
其他语句
return 语句表示返回某个值,但是Scala事实上无须使用return语句
对于函数来说,其默认返回值是最后出现的一个值,不用特别注明。如需要返回的值
并非最后出现时,可在函数体后加上该值的标识符使之“出现”
声明函数时使用return语句,必须声明返回值的类型,如def abd():T={return}
break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以
使用布尔值类型的量通过IF语句进行控制
来源:oschina
链接:https://my.oschina.net/u/2010394/blog/655911