scala编程-2

package com.bfdspark.scala.basic

/**
 * scal中的基本控制结构有顺序、条件和循环三种方式,这和其他的jvm语言一致,但
 * scala也有一些高级的流程控制结构,例如模式匹配
 * 主要将if,for,while等三种,及其企业级实践
 */
object ControlStructures {
  def main(args: Array[String]): Unit = {
    
    var age = 30
    
    //if表达式会根据括号里面的boolean值来决定整个if表达式的值
    //scala中if条件表达式是有值的!!!!
    
    val result = if(age > 25) "Worker" else "Student" //此时因为worder和student都是字符串,所以result也是string类型
    println(result)//if else是有值的
    
    //if条件表达式中可以进行类型推倒,类型推倒,一般过程是根据变量类型来推倒确定变量的类型,这在很多复杂算法的实现的时候可以
    // 让我们省略到变量的类型的书写,为复杂算法的实现提供了非常的便利
    val result2 = if(age > 18) "Adult" else 1 //因为if-else两侧,一个是字符串,一个是int类型,所以result2的类型是两者的公共父类any
    
    //如果if后面没有else部分,默认的实现是if() ... else ()
    age=10
    val result3 = if(age > 18) "Adult"
    println(result3)//()
    /*下面的例子节选自spark的核心类SparkContext,在else部分不返回有意义的结果,但仍没有省略else,而是使用了
     * else{ None }这种方式,其目的是为了确保if表达式的类型为处理逻辑需要的类型Option,而不是any类型,
     *为下一步的处理打下基础
     * if(isEventLogEnabled){Some(logger) }else{None}
     * 
     * if表达式中有多条语句,可以用{ }包裹起来,有问题,{}中多条语句哪条是计算结果,前面已经说明,是{}中的最后一条语句
     * 
     * 补充说明,{...}代表了一个语句块,语句块是有值的,值就是最后一条语句,其类型是最后一条语句值的类型
     */
    var x,y = 0
    val result4 = if(age<18){
      x=x+1
      y=y+1
      x+y
    }else 0
    println(result4)
    
    /**
     * if表达式可以用在for循环等 其他控制结构中用户限制结果
     * for循环是不断循环一个集合,然后根据for循环后面的{..}代码块部分会根据for循环{..}里面提取的
     * 集合的item来作为{...}的输入流程控制
     * for循环中加入的if叫做条件守卫,用于限制for循环(优化for循环,去掉不必要的步骤,或者说用户跳出for循环)
     *
     * 调出for循环,除了加入守卫以外,还可以使用return
     */
    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 =0 
    for(i<-0 to 6 ){
     if(i==5){
       //return
     }else{
        println(i)
     }
    }
    
    //增强for循环
    //最后强调一次,在for循环中能够提取出什么内容取决于后面集合的类型
    for(item <-"hello spark".split(" ")) println(item)
    
    /**
     * while循环也是循环机和作为{。。。}的输入,进而完成流程的控制,while循环在实际server和framework
     * 开发中至关重要,例如让一个线程一直的循环下去,一般都会用while循环。
     * 
     * scala中可以用break
     */
    import scala.util.control.Breaks._
    flag = true
    breakable{
      while(flag){
      for(item<-"spark"){
        println(item)
        if(item =='r'){
          flag = false
          break
        }
      }
    }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值