Scala語法(二)——控制結構
阿新 • • 發佈:2018-12-25
Scala中的基本控制結構有順序、條件和迴圈三種方式,這個和其他的JVM語言是一致的,但是Scala也有一些高階的流程控制結構類模式匹配。
1、程式程式碼:
package com.dtspark.scala.basic
object controlStructures {
def main(args: Array[String]): Unit = {
println("Scala")
var age=10
//此時因為Worker和Student都是字串,所以result的型別是string型別
val result=if(age>25)"Worker" else"Student"
println(result)
//此時因為if表示式中的else的內容一個是字串型別,一個整型,所以result1的型別是兩者的公共父類Any
val result2=if(age>18)"Adult" else 17
val result3=if(age>18)"Adult"
//列印的是(),即返回的是空值,Unit型別
println(result3)
var x,y=0
val result4=if(age<18)
{
x=x+1
y=y+1
x+y
}else 0
println(result4)
for(i<-0 to 5 if i==2)
{
println(i)
}
var flag=true
var sum=0
for(i<-0 to 6 if flag)
{
sum=sum+i
if(5==i) flag=false
}
println("sum="+sum)
sum=0
/* for(i<-0 to 6)
{
sum=sum+i
//return返回的是方法級別的,即後面的不會執行,直接退出整個def方法
if(5==i) return
}
println("sum with return="+sum)*/
for(item<-"Hello Spark") println(item)
import scala.util.control.Breaks._
flag=true
breakable
{
while(flag)
{
for(item<-"Spark")
{
println(item)
if(item=='r')
{
flag=false
break
}
}
}
}
println("while finished!!!")
}
}
2、語法說明
if語句,if條件表示式會根據if後面括號裡面的boolean值來決定整個if表示式的值
- 1.Scala中的if條件表示式是有值的!!!這個跟java是不一樣的
- 2.if條件表示式中可以進行型別推導,型別推導的一般過程就是根據變數值的型別來推導確定變數的型別,這在很多複雜演算法的實現時可以讓我們
- 省略掉變數的型別的書寫,為複雜演算法的實現提供了非常大的便利
- 3.下面的例子節選自Spark的核心類SparkContext,如果if後面沒有else部分,預設的實現時if(…)…else(),在else部分雖然不返回有意義的結果,但依舊沒有省略else,而是使用了else{None}這種方式,其目的是為了確保if條件表示式的型別為處理邏輯需要的型別Optinon,而不是Any型別,為下一步的處理打下基礎
例:if(isEventLogEnabled){Some(logger)}else{None} - 4.if條件表示式中如果有多條語句可以使用{}包裹起來,{}中的最後一條語句是計算結果
- 5.{…}代表了一個語句塊,語句塊是有值的,值就是最後一條語句,值型別就是最後一條語句的型別。
- 6.if表示式可以用在for迴圈等其它控制結構中用於限制結果
for語句,for迴圈是不斷的迴圈一個集合,然後根據for迴圈後面的{…}程式碼部分會根據for迴圈(…)裡面提取的,集合的item來作為{…}的輸入程序流程控制.
1.for迴圈中加入的if叫做條件守衛,用於限制for迴圈(優化for迴圈,去掉不必要的執行步驟,或者說用於跳出for迴圈)
2.在for迴圈中能夠提取出什麼內容取決於後面集合的型別
3.想跳出for迴圈除了加入if守衛以外,還可以使用return關鍵字- while迴圈,也是迴圈集合來作為{…}的輸入,進而完成流程的控制的,while迴圈在實際,Server和Framework開發中至關重要,例如讓一個執行緒一直迴圈下去,一般都會使用while