Scala中if使用

從表面上看,Scala中的if語句看起來很像Java中的If語句。執行時首先判斷表達式的值,如果爲true,則執行對應代碼塊。否則進行下一代碼塊判斷。如下:

if(2+2 == 5){
    println("hello from 1984.")
}else if(2+2 ==3){
    println("hello from Remedial wath class?")
}else{
    println("hello from a non-Orwellian future.")
}

上述代碼與java中if語句沒有任何差異,會執行條件爲true的代碼塊。但是,在Scala中,if與幾乎所有其他語句都是具有返回值的表達式。即可以將一個if語句賦值一個變量。如:

val configFile = new java.io.File("somefile.txt")
val configFilePath = if(configFile.exists()){
    configFile.getAbsolutePath()
}else{
    configFile.createNewFile()
    configFile.getAbsolutePath()
}

上述代碼實現的功能是:判斷文件是否存在,如果存在,則將文件的絕對路徑賦值給configFilePath,否則新建文件,並將新文件路徑賦值給configFilePath。
對於if語句的返回值,主要時是根據各個判斷子句可能返回的類型決定,即取各個可能返回值的最接近父類,也稱爲所有條件分支的最小上界類型。

class Person
class Student extends Person
class Worker extends Person
def getPerson(age:Int){
    val p1 = if(age <= 25){
        new Student()
    }else{
        new Worker()
    }
}

在上述代碼中,如果輸入年齡小於25,則返回Student對象,如果大於25,則返回Worker對象。Scala會根據類型推導,判斷各個分支語句返回值,然後取其最小父類。本例中,if表達式返回值是Student和Worker的共有父類,即Person。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章