Scala 语法总结之流程控制(if、for、while、代码块)

49 篇文章 3 订阅
38 篇文章 3 订阅

Scala 语法总结之流程控制(if、for、while、代码块)

1. 背景

  1. scala是一门编程语言,语法特性设计贯穿了2个思想,面向对象和函数式编程特性支持
  2. 在scala中,代码块也是一个对象,最小的代码单位对比java,scala中最小代码单位是函数,而java则是对象。所以scala可以有更加灵活的代码组织方式
  3. 在所有编程语言设计中,基本会包含的几个大块都是一样
  1. 数据类型
  2. 流程控制
  3. 运算符
  4. 注释
  5. 方法和函数定义
  6. 权限控制
  7. 集合
  8. IO流
  9. 网络编程
  10. 多线程

2. if else

  • 单层if else
package com.doit.ifelse

object IfElseTest {
  def main(args: Array[String]): Unit = {
    
    if(1 == 2) {
      println("世界崩塌了")
    } else {
      println("世界还正常")
    }
    
    // 这里可以看到value是接收了一个if else代码块对应返回值,
    // 注意,scala中代码块、函数、方法中,默认最后一句代码就是返回值,除非显示指定返回值是Unit
    val x = 1
    val value: Any = if (x > 1) {
      1
    } else {
      "error"
    }

	println("value:" + value)
  }
}
  • 多层if else(嵌套)
package com.doit.ifelse

object IfElseNested {

  def main(args: Array[String]): Unit = {
    val x = 2
    val y = 3
    val z = 0

    if(z > x) {
      println("不会发生的事情发生了,快去买彩票")
    } else {
      if(z > y) {
        println("不会发生的事情发生了,快去买彩票")
      } else {
        println("是的,0确实小于3,也小于2")
      }
    }

  }
}

  • 还是一样,在scala中,代码块也是一个对象,同时代码块中,默认最后一行就是返回值,所以代码块可以使用变量或者常量保存起来,具体类型编译器会自动进行推断。

3. 代码块

package com.doit

object CodeBlock {

  def main(args: Array[String]): Unit = {

    val  x = 0

    val unit: Unit = {
      val value: Any = if (2 == 2) {
        println("是的,这个判断条件就是这么真,,,,")
        2
      } else {
        println("如果这句代码执行了,我直播吃,,,,")
        "哈哈,真的要吃?"
      }

      println(value)
    }

    println(unit)
  }
}

4. for循环

  1. 和java一样,for循环分类普通for循环和增强for循环。
  2. 同样的,for循环也是可以多层嵌套的,不过写法上会不一样些。
  3. 同时for循环嵌套使用也一样,不适合嵌套过多层级,否则会导致代码可读性下降不少。
package com.doit.loop

import scala.collection.immutable

object ForTest2 {
  def main(args: Array[String]): Unit = {

    // to是从0开始,也包括最后的数字10
    for(i <- 0 to 10){
      println(i)
    }

    println("==============")

    // until 是从0开始,但不包括最后的数字10
    for(x <- 0 until 10) {
      println(x)
    }
    println("==============")

    // 直接对需要循环的数组做遍历
    val ints: Array[Int] = Array(3, 4, 5, 6, 7, 9)
    for(ele <- ints) {
      println(ele)
    }
    println("==============")

    // 2层循环结构
    // 守卫者模式,也就是通过if对循环条件做过滤
    for(i <- 0 to 9; j <- 0 to 9 if i != j) {
      print(s"$i - $j" + "\t")

      if(j == 9) {
        println()
      }
    }
    println()
    println("==============")

    // 通过yield对遍历的数组等做结果处理和搜集
    val seq: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i * 10
    println(seq)
    println("==============")
  }
}
  1. 在scala里面没有运算符,都有的符号其实都是方法。
  2. 在scala里面没有++ – 的用法
  3. for( i <- 表达式/数组/集合)
  4. 在for循环里面我们是可以添加if表达式
  5. 有两个特殊表达式需要了解:
    To 1 to 3 1 2 3
    Until 1 until 3 12
  6. 如果在使用for循环的时候,for循环的时候我们需要获取,我们可以是使用yield关键字。

5. while和do while循环

这个和java一样,while需要先判断是否条件再执行,do while则不管条件是否为true,都会先执行一次do代码块中代码。

package com.doit.loop

object WhileLoop {
  def main(args: Array[String]): Unit = {
    var n = 10

    while (n < 30) {
      println(n)

      // 注意,scala中去掉了具有一定迷惑含义的++ 和--语法,但+= -=等语法还在
      n = n + 3
      // n += 3 也是一样的
    }

    println("====================")

    var m = 10
    do {
      println(m)
      m += 4
    } while (m < 30)
  }
}

6. 总结

  1. 作为编程语言中使用主流之一的java特性在scala中被很好的成套应用起来。带来好处就是广大的java程序员群体可以很好转换过来,这一点上kotlin语言也是如此设计的,这样可以很好降低编程语言使用门槛。
  2. 在scala的流程控制语句中,需要注意的是多层for循环的写法不一样,其他和java基本是一致的。
  3. 流程控制中,switch的实现对比java有较大改动,后续会专文说明。
  4. 如果没有java基础,学习scala可能会略有难度,但基本思想注意即可,scala 的语言设计处处体现出面向对象和函数式编程特性支持。记住这两点,学习scala就会好很多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值