Scala系列4:轻松搞定Scala中for,if,while,块表达式等

2020-09-27 19:02发布


0.条件表达式

      条件表达式一般就是if表达式, if表达式可以根据给定的条件是否满足, 根据条件的结果(真或假) 决定执行对应的操作。 scala条件表达式的语法和Java一样。

0.1有返回值的if条件表达式

尖叫提示:

  • 特别注意:在scala中,跟Java不同, 条件表达式是有返回值的,所以可以将它赋值给变量

  • 但是像if-else语句这种缺失else的情况,Scala引入了一个Unit类,写作(),来作为缺省的表达式默认值。


  1. scala> val sex = "male"

  2. sex: String = male

  3. scala> val result = if(sex == "male") 1 else 0

  4. result: Int = 1

  5. scala> if(1>2) 1

  6. res34: AnyVal = ()

  • 在scala中, 没有三元表达式, 可以使用if表达式替代三元表达式

  • 条件表达式if有三种格式 if,if -else ,if -else if -....- else 。跟java中一样,else是可缺省的

0.1.1 if与if-else类型


  1. scala> val sum = 100;

  2. sum: Int = 100


  3. scala> val res = if(sum > 99) 1 else 0

  4. res: Int = 1


  5. scala> val res1 = if(sum >200) 200

  6. res1: AnyVal = ()


  7. scala> val res1 = if(sum >200) 200 else()

  8. //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void

  9. res1: AnyVal = ()


  10. scala> val x = 0;

  11. x: Int = 0


  12. scala> val z = if (x > 1) 1 else "error"

  13. //if支持混合类型表达式,z没有指定类型

  14. z: Any = error

0.1.2 if与if -else if-else,else可缺省,else if可多个。


  1. scala> val x = 95;

  2. x: Int = 95


  3. scala> val re = if(x < 60) "差"

  4. re: Any = ()


  5. scala> val re = if(x < 60) "差" else if (x > 60 ) "优" else "未知"

  6. re: String = 优


  7. scala> val re1 = if(x < 60) "差" else if (x > 60 && x<= 80 ) "优" else if(x >80 && x<=100) "棒" else "未知"

  8. re1: String = 棒

0.2 块表达式


  1. //1.块{}之间互相嵌套,块中最后一个表达式y*x就是该块的值;

  2. package com.robot.scalademo1

  3. class scala_demo1 {

  4. }

  5. object BlockExpressionDemo {

  6. //object 相当于静态的单例对象,不需要new

  7. def main(args: Array[String]) {

  8. val x = 1

  9. //在scala中{}中包含一系列表达式,块中最后一个表达式的值就是块的值

  10. //下面就是一个块表达式

  11. val result = {

  12. if (x < 0){

  13. -1

  14. } else if(x >= 1) {

  15. val y = x+5; y*x;

  16. } else {

  17. "error"

  18. }

  19. }

  20. println("这是块表达式的结果:"+result)


  21. }


  22. }


  23. //结果如下:

  24. 这是块表达式的结果:6

尖叫提示:

  1. 在Scala中块{}可以互相嵌套,每个块{}又遵循块的原理;

  2. {}块可以包含一系列表达式,其结果也是一个表达式,如上-1就是一个表达式;

  3. 块{}跟if表达式一样也是有值的。其值就是块中最后一个表达式的值;同一个块中的表达式顺序执行。

  4. 注意,块中最后一个表达式不能是赋值语句,否则结果返回(),Unit类型,相当于java中的void,具体后面介绍。如下案例演示:


    1. //1.块表达式最后一个表达式的结果是赋值语句;

    2. package com.robot.scalademo1

    3. class scala_demo1 {

    4. }

    5. object BlockExpressionDemo {

    6. //object 相当于静态的单例对象,不需要new

    7. def main(args: Array[String]) {

    8. val x = 1

    9. //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值

    10. //下面就是一个块表达式

    11. val result = {

    12. if (x < 0){

    13. -1

    14. } else if(x >= 1) {

    15. val y = x+5; val z = y*x;

    16. } else {

    17. "error"

    18. }

    19. }

    20. println("这是块表达式的结果:"+result)


    21. }


    22. }


    23. //结果如下:

    24. 这是块表达式的结果:()

1.循环for/while的使用

1.1 for的使用

      在scala中, 可以使用for和while, 但一般推荐使用for表达式, 因为for表达式语法更简洁


  1. 1.for的语法结构

  2. for(i <- 表达式/数组/集合) {

  3. // 表达式

  4. }


  5. 2.for的使用。Scala的for循环相对java来说更加简洁;

  6. val i = 0;

  7. for(i <- 1 to 10 ){

  8. print(i+",")

  9. //结果如下:1,2,3,4,5,6,7,8,9,10,



  10. 3.上面的1 to 10,其实就是表示生产一个1-10的序列range.如下:

  11. scala> val nums = 1.to(10)

  12. nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)


  13. //测试代码如下

  14. val nums = 1.to(100)

  15. for(i <- nums){

  16. print(i+",")

  17. }

  18. //结果如下:1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,

  19. Process finished with exit code 0


  20. 4.如果for循环只有一个执行语句,那么可以不带{}

  21. for(i <- 1 to 10) println(i)


  22. 5.//for(i <- 数组)

  23. val arr = Array("a", "b", "c")

  24. for (i <- arr)

  25. println(i)


  26. 6. //高级for循环

  27. //每个生成器都可以带一个条件,注意:if前面没有分号,有分号也可以

  28. for(i <- 1 to 3; j <- 1 to 3 if i != j ; if i %j ==1 )

  29. print((10 * i + j) + " ") //结果是:12 13 21 23 31 32

  30. println()

for循环尖叫提示:

1.Scala中的for循环语法简洁,没有java中for(初始化变量;检查变量是否满足条件;变量更新)功能,要想实现此功能,要不就是用while。要不就是使用特殊for语句,在for代码块里添加if守卫,这个极度常用。


  1. //方式1: 打印 1-200之间的奇数

  2. val nums = 1.to(100)

  3. for(i <- nums){

  4. var r = 2*i-1

  5. print(r+",")

  6. }


  7. //方式2:在for语句中添加if守卫方式,实现打印200以内的奇数。

  8. val nums = 1.to(200)

  9. for(i <- nums;if i%2 != 0){ //注意,这里if前面的分号可以不加;

  10. print(i+",")

  11. }

2.嵌套for循环,这个和Java嵌套for循环差别很大,语言就是简洁,简洁到抽象


  1. for(i <- 1 to 3; j <- 1 to 5)

  2. {print("*");

  3. if(j == 5)

  4. println("")}


  5. //嵌套for循环,结果如下:

  6. *****

  7. *****


3.Scala并没有提供break,continue语句来退出循环。但是使用Boolean类型的控制变量(如if条件表达式);使用嵌套函数(return方式);使用Breaks中的break方法;


  1. // 添加守卫, 打印能够整除3的数字

  2. for(i <- 1 to 10 if i % 3 == 0) println(i)

4.for推导;将来可以使用for推导式生成一个新的集合(一组数据);在for循环体中, 可以使用yield表达式构建出一个集合, 我们把使用yield的for表达式称之为推导式。


  1. // for推导式: for表达式中以yield开始, 该for表达式会构建出一个集合

  2. val v = for(i <- 1 to 10) yield i * 10

1.2 while的使用

尖叫提示:

scala中while循环和Java中是一致的,比较简单。


  1. //1.打印10以内的奇数

  2. var z = 1;

  3. while (z <= 10){

  4. print(z)

  5. z += 2;

  6. }

作者:涤生手记

链接:https://blog.csdn.net/qq_26442553/article/details/108302449

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。