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。

你可能感兴趣的:(scala)