黑猴子的家:Scala if else 表达式

scala中没有三元运算符,因为根本不需要。scala中if else表达式是有返回值的,默认返回类型是Any类型,在根据实际返回的数值进行推断,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型)。

Java 中 的三元运算符是为了弥补缺陷 Java 中 if else 的缺陷

java中 if else 是没有返回值的, Scala if else 有返回值

public String getName(Person person){
    if(person.id == 1){
        return “Nick”
    }else if(person.id == 2){
        return “Bob”
    }
}

String Name = person.id == 1 ? “Nick”:”Bob”

1、if else 案例一

返回类型一样

val a1 = 10
//val a1 = 30
val a2 =
if(a1 > 20){
   "a1大于20"
}else{
   "a1小于20"
}
println(a2)
println(a2.getClass().getName())

尖叫提示:if else 是有返回值,返回类型是可以混杂在一起的,可以不是统一的

2、if else 案例二

缺少判断,返回类型不一样

val a3 =
  if(a1 > 20){
    "a3 大于 20"
  }
println(a3)
println(a3.getClass().getName())

尖叫提示:如果缺少一个判断,什么都没有返回,但是Scala认为任何表达式都会有值,对于空值,使用Unit类,写做(),叫做无用占位符,相当于java中的void。行尾的位置不需要分号,只要能够从上下文判断出语句的终止即可。但是如果在单行中写多个语句,则需要分号分割。在Scala中,{}包含一系列表达式,其结果也是一个表达式。块中最后一个表达式的值就是块的值。

3、if else 案例三 if else是有返回值的

返回类型不一样

var flag = false
//返回unit ()
val result3 = if (a1 >= 20){
  flag = true
}

//返回false
val result4 = if (a1 >= 20){
  true
}

4、if else 案例四 变型

//大括号是可以省略的
val a5 = if(a1 > 20) "a1大于20" else 10

//点 和 括号  都可以省略
//()是unit的唯一实现
println(a5.getClass().getTypeName())
//括号是可以省略的
println(a5.getClass.getTypeName)
//点是可以省略的
println(a5.getClass getTypeName)
println((a5 getClass) getTypeName)

尖叫提示:使用REPL(dos 终端)比编译器来讲,有一个近视眼问题,它在同一个时间只能看到一行代码。

举例来说当你键入如下代码时

if (x > 0) 1
else if (x == 0) 0 else -1

REPL会执行if ( x > 0 ) 1,然后显示结果,之后它看到接下来的else关键字,就会不知所措了
如果你想在else前换行的话,用花括号

if ( x > 0 ) { 1
} else if ( x == 0 ) 0 else -1

只有在REPL中才会有这个顾虑,在被编译的程序中,解析器会找到下一行的else
但是如果你想在REPL中粘贴成块的代码,而有不想担心REPL的近视眼问题,可以使用REPL的粘贴模式,键入

:paste

把代码块粘贴进去,然后按下Ctrl + D 组合键,这样REPL就会把代码块当做一个整体来分析了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值