zoukankan      html  css  js  c++  java
  • scala的基本语法(二):流程控制

    一、If-else

    ① 单分支

    ​ if(条件表达式) 没有else

    ② 双分支

    ​ 类似java 三元运算符 if(条件表达式) -----else----

    ③多分支

    ​ if (条件表达式) else if (条件表达式) else

    二、 For循环

    1.普通for

    for(i <- 0 to n)

    for (i<- 0 until n)

    • to 区间是开区间,until 左闭右开
    • for循环的变量i与其他同名变量i不冲突(同java),作用域持续到循环结束;该变量类型是集合的元素类型

    2.高级for循环 循环控制

    循环守卫

    • 即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue

    • 每个生成器都可以带上守卫,以if开头的Boolean表达式,注意if前面没有分号

    • 变量<-表达式的形式可以提供多个生成器,之间用**;**隔开。

    • 可以使用任意多的定义 ,引入可以在循环中使用的变量:

      for(i<- 1 to 3;from=4-i;j<- from to 3)print(f"${10*i+j}%3d")//书上的例子
      for (i <- 1 to 9; y <- 1 to i) {print(f"$i%dX$y%d=$i * y%d+\t") ;if (i == y) println()} //99乘法表
      for (i <- 1 to 9; y <- 1 to i; n = i * y) if (i == y) println(i + "X" + y+"=" + n) else print(f"$i%dX$y%d=$n%d+\t")//99乘法表方式二
      

    break

    参考后面Break

    步长控制Range、 By、indices、reverse

    for(i <- Range(1,10,2))

    for(i<-1 to 10 by 2)

    for(i<-1 to 10 reverse)

    • 此处的range区间为左开右闭
    • 循环守卫也可以实现步长控制

    For推导式(For comprehension)

    ​ for循环中的 yield 后可以写代码块,yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中for循环是有返回值的。如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是List,以此类推。生成的集合与他的第一个生成器是类型兼容的。

    scala> val arr = Array(1, 2, 3, 4, 5)
    scala> for (e <- arr) yield e
    res1: Array[Int] = Array(1, 2, 3, 4, 5)//数组
    val res = for(i <- 1 to 10) yield i * 2//集合
    println(res) 
    Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
    

    三 、While循环

    ① while

    while (循环条件) {
            循环体(语句)
            循环变量迭代
    	}
    

    ②do while

       do{
            循环体(语句)
            循环变量迭代
       } while(循环条件)
    

    Break

    ​ 两种方法breakable(高阶函数),Breaks.break()

    1.import util.control.Breaks
     直接使用Breaks.break()//虽然中止了,但会报异常
    2.import util.control.Breaks._
      //使用 breakable函数 需要将完整代码包裹
       breakable {
              break() //不会报错
            }
    

    ​ Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决break和contine的功能,而不是一个关键字

    注意的地方

    • Scala中任意表达式都是有返回值的,所以引入一个Unit类,写作(),表示无值的值。if 表达式不带else 等同于返回()——快学scala

    • 与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()

    • 因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,所以不推荐使用,推荐使用for循环

    ​ for 优化 ()

    / for(i <- 1 to 100 if flag) {
    //        sum += i
    //        if( sum > 20) {
    //          curI = i
    //          flag = false
    //        }
    
  • 相关阅读:
    ThreadLocal的原理和使用场景
    sleep wait yield join方法的区别
    GC如何判断对象可以被回收
    双亲委派
    ConcurrentHashMap原理,jdk7和jdk8版本
    hashCode和equals
    接口和抽象类区别
    为什么局部内部类和匿名内部类只能访问局部final变量
    【GAN】基础GAN代码解析
    TF相关codna常用命令整理
  • 原文地址:https://www.cnblogs.com/successok/p/14737330.html
Copyright © 2011-2022 走看看