zoukankan      html  css  js  c++  java
  • Scala控制语句

    2019-04-16 19:03:01

    if else 表达式

      var sumVal = 0

      if ( sumVal == 0 ) {

          println("true")

      } else {

          println("false")

      }Scala中任意表达式都是有返回值的,也就意味着if else表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容:   

      var result = if ( sumVal == 0 ) {

          println("true") // 此处为满足条件逻辑的最后一行内容,打印语句是没有返回值的

      } else {

          "false" //此处为不满足条件逻辑的最后一行内容,此处返回值为字符串String

      }

        因为Scala在编译期间无法知道程序的逻辑是满足或不满足,所以无法推断出result变量的具体类型,所以就设定为Any类型(所有类型的公共超类型)

        如果缺少一个判断,什么都没有返回,但是Scala认为任何表达式都会有值,对于空值,使用Unit类,叫做无用占位符,相当于java中的void, 打印结果为(),

    while表达式

     while循环

    Scala提供和Java一样的while和do循环,与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()。

    注:因为while和do…while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响, 也就违背了函数式编程的重要思想,所以不推荐使用。

    while 循环的中断 

      Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,

      推荐使用函数式的风格解决break和contine的功能,而不是一个关键字。


    for 表达式  

    Scala 也为for 循环这一常见的控制结构提供了非常多的特性,这些for 循环的特性被称为for 推导式(for comprehension)或for 表达式(for expression)。

      1) 范围数据循环1:to左右两边为前闭后闭的访问

      2) 范围数据循环2:until左右两边为前闭后开的访问  

      for(i <- 1 until 3) {

        print(i + " ")

      }

    println()

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

      for(i <- 1 to 3 if i != 2) {

        print(i)

      }

      println()  

      4) 引入变量:

      for(i <- 1 to 3; j = 4 - i) {

        print(j + " ")

      }

      5) 嵌套循环:

      for(i <- 1 to 3; j <- 1 to 3) {

        print(i*j + " ")

      }  

      6) 循环返回值:(将遍历过程中处理的结果返回到一个新集合中,使用yield关键字)

      val for5 = for(i <- 1 to 10) yield i

      println(for5) 

      7) 使用花括号{}代替小括号()

    注:{}()对于for表达式来说都可以。for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用原括号,当其包含多个表达式时使用大括号。值得注意的是,使用原括号时,早前版本的Scala 要求表达式之间必须使用分号。

     

     

     

     

     

     

  • 相关阅读:
    前端下载图片到本地
    小程序复制文本
    小程序的分享
    vue简单的父子组件之间传值
    git新的远程分支同步到本地
    C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)
    别再眼高手低了! 这些Linq方法都清楚地掌握了吗?
    Asp.NetCore 3.1 使用AutoMapper自动映射转换实体 DTO,Data2ViewModel
    .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
    core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试
  • 原文地址:https://www.cnblogs.com/Vowzhou/p/10719245.html
Copyright © 2011-2022 走看看