scala控制结构

scala中的基本控制结构:1.顺序2.条件3.循环,和其他的JVM语言是一致的。

scala也有一些高级的控制结构,例如模式匹配。


if条件表达式会根据if后面括号里面的boolean来决定整个if表达式的值

1.scala中的if表达式是有返回值的!这点和Java是不同的

2.if表达式中可以进行类型推导,推导一般过程就是根据变量的值的类型来推导确定变量的类型,这在很多复杂算法的实现的时候可以让我们省略变量类型的书写,为复杂算法的实现提供了非常大的便利

3.如果if后面没有else部分,默认的实现是if()...else()

//下面的例子节选自Spark的核心类SparkContext,在else部分虽然不返回有意义的结果,但是依旧没有省略else,而是使用了else{None},
//其目的是为了确保if表达式的类型为处理逻辑需要的类型Option,而不是Any类型
if(isEventLogEnabled){some(logger)}else{None}


Scala的Option[T]是容器对于给定的类型的零个或一个元件。Option[T]可以是一些[T]或None对象,它代表一个缺失值。例如,Scala映射get方法产生,如果给定的键没有在映射定义的一些(值),如果对应于给定键的值已经找到,或None。选项Option类型常用于Scala程序,可以比较这对null值Java可用这表明没有任何值。例如,java.util.HashMap中的get方法将返回存储在HashMap的值,或null,如果找到没有任何值。

比方说,我们有一个检索来自基于主键数据库中的记录的方法:

def findPerson(key: Int): Option[Person]

该方法会返回一些 [人士] 如果找到记录,如果找不到记录那么为None。让我们来看看一个真实的例子:

object Test {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      
      println("capitals.get( "France" ) : " +  capitals.get( "France" ))
      println("capitals.get( "India" ) : " +  capitals.get( "India" ))
   }
}

当上述代码被编译和执行时,它产生了以下结果:

C:/>scalac Test.scala
C:/>scala Test
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

C:/>

使用可选值最常用的方法是模式匹配。例如:

object Test {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      
      println("show(capitals.get( "Japan")) : " +  
                                          show(capitals.get( "Japan")) )
      println("show(capitals.get( "India")) : " +  
                                          show(capitals.get( "India")) )
   }
   
   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

当上述代码被编译和执行时,它产生了以下结果:

C:/>scalac Test.scala
C:/>scala Test
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

C:/>


4.if表达式中如果有多条语句,可以使用{}包裹起来,{}中的多条语句中的最后一条是计算结果

5.{}代表了一个语句块,语句块是有值的,值就是最后一条语句,其类型是最后一条语句值的类型

6.if表达式可以用在for等其他循环控制结构,用于限制循环结果

for(x<-0 to 5 if(x == 2)){

   println(x)

}


for循环

1.for循环中加入的if叫条件守卫,用于限制for循环(优化for循环,去掉不必要的执行步骤,或者说用于跳出for循环)

2.在for循环中,能够提取什么内容,取决于后面集合的类型

3.跳出for循环,除了加入if守卫以外,还可以使用return关键字

(return返回的是方法级别的)


while循环也是循环集合,来作为代码块的输入,进而完成流程的控制的,while在实际Server和Framework开发中至关重要,例如让一个线程一直循环下去,一般都会用while


import scala.util.control.Breaks._

flat = true

breakable{

    while(flag){

        ....

       break

    }

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值