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

Stella981
• 阅读 754

0.条件表达式

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

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

尖叫提示:

  • 在scala中,跟Java不同, 条件表达式也是有返回值的

    scala> val sex = "male" sex: String = male scala> val result = if(sex == "male") 1 else 0 result: Int = 1

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

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

0.1.1 if与if-else类型

scala> val sum = 100;
sum: Int = 100

scala> val res = if(sum > 99) 1 else 0
res: Int = 1

scala> val res1 = if(sum >200) 200
res1: AnyVal = ()

scala> val res1 = if(sum >200) 200 else()
//在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
res1: AnyVal = ()

scala> val x  = 0;
x: Int = 0

scala>   val z = if (x > 1) 1 else "error"  
//if支持混合类型表达式,z没有指定类型
z: Any = error

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

scala> val x = 95;
x: Int = 95

scala> val re = if(x < 60) "差"
re: Any = ()

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

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

0.2 块表达式

//1.块{}之间互相嵌套,块中最后一个表达式y*x就是该块的值;
package com.robot.scalademo1
class scala_demo1 {
}
object BlockExpressionDemo {
  //object 相当于静态的单例对象,不需要new
  def main(args: Array[String]) {
    val x = 1
    //在scala中{}中包含一系列表达式,块中最后一个表达式的值就是块的值
    //下面就是一个块表达式
    val result = {
      if (x < 0){
        -1
      } else if(x >= 1) {
        val y = x+5;   y*x;
      } else {
        "error"
      }
    }
    println("这是块表达式的结果:"+result)
    
  }

}

//结果如下:
这是块表达式的结果:6    

尖叫提示:

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

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

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

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

    //1.块表达式最后一个表达式的结果是赋值语句;
    package com.robot.scalademo1
    class scala_demo1 {
    }
    object BlockExpressionDemo {
      //object 相当于静态的单例对象,不需要new
      def main(args: Array[String]) {
        val x = 1
        //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值
        //下面就是一个块表达式
        val result = {
          if (x < 0){
            -1
          } else if(x >= 1) {
            val y = x+5;   val z = y*x;
          } else {
            "error"
          }
        }
        println("这是块表达式的结果:"+result)
    
      }
    
    }
    
    //结果如下:
    这是块表达式的结果:()
    

1.循环for/while的使用

1.1 for的使用

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

1.for的语法结构
for(i <- 表达式/数组/集合) {
// 表达式
}

2.for的使用。Scala的for循环相对java来说更加简洁;
  val i = 0;
    for(i <- 1 to 10 ){
      print(i+",")
//结果如下:1,2,3,4,5,6,7,8,9,10,


3.上面的1 to 10,其实就是表示生产一个1-10的序列range.如下:
scala> val nums = 1.to(10)
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//测试代码如下
val  nums = 1.to(100)
    for(i <- nums){
      print(i+",")
    }
//结果如下: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,
Process finished with exit code 0

4.如果for循环只有一个执行语句,那么可以不带{}
 for(i <- 1 to 10) println(i)

5.//for(i <- 数组)
    val arr = Array("a", "b", "c")
    for (i <- arr)
      println(i)

6. //高级for循环
    //每个生成器都可以带一个条件,注意:if前面没有分号,有分号也可以
    for(i <- 1 to 3; j <- 1 to 3 if i != j ; if i %j ==1 )
      print((10 * i + j) + " ")  //结果是:12 13 21 23 31 32
    println()

for循环尖叫提示:

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

//方式1: 打印 1-200之间的奇数
val  nums = 1.to(100)
    for(i <- nums){
      var  r = 2*i-1
      print(r+",")
    }

//方式2:在for语句中添加if守卫方式,实现打印200以内的奇数。
  val  nums = 1.to(200)
    for(i <- nums;if i%2 != 0){  //注意,这里if前面的分号可以不加;
      print(i+",")
    }

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

 for(i <- 1 to 3; j <- 1 to 5) 
     {print("*"); 
       if(j == 5) 
         println("")}

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

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

// 添加守卫, 打印能够整除3的数字
for(i <- 1 to 10 if i % 3 == 0) println(i)

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

// for推导式: for表达式中以yield开始, 该for表达式会构建出一个集合
    val v = for(i <- 1 to 10) yield i * 10

1.2 while的使用

尖叫提示:

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

//1.打印10以内的奇数
  var z = 1;
    while (z  <= 10){
      print(z)
      z += 2;
    }
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
SQL条件语句(IF, CASE WHEN, IF NULL)
1.IF  表达式:IF(expr1,expr2,expr3)  expr1条件,条件为true,则值是expr2,false,值就是expr3SELECTo.id,u.account,catagory.name,orderTime,detail.amount,periodtime,if(direc
Wesley13 Wesley13
3年前
Java自学
Java的If条件语句条件判断示例1:ifif(表达式1){表达式2;}如果表达式1的值是true,就执行表达式2!if(https://oscimg.oschina.net/oscnet/9bbaf72c54f9849129e8a039
Wesley13 Wesley13
3年前
MySQL 数据查询语言(DQL)& 事务控制语言(TCL)详解
一、数据查询语言(DQL)(重中之重)完整语法格式:select表达式1|字段,....\from表名where条件\\groupby列名\\having条件\\orderby列名
Wesley13 Wesley13
3年前
Java基础 : Java语句
Java基础:Java语句Java语句下载地址 http://wenku.it168.com/d\_000596432.shtml关键语句介绍一、while语句一般形式:while(条件表达式){语句体………}执行过程:条件表达式为真,执行语句
Wesley13 Wesley13
3年前
Java05
Java05Java基础语法(四)循环结构循环结构(重复/迭代):根据条件重复执行部分语句1、while循环结构while(条件表达式){     循环体语句;}1)语法:a、while是关键字        b、“条件表达式”必须用括号括起来        c、“{}”表示循环的控制范围,若没有“{}”,whil
Stella981 Stella981
3年前
Python—语法基础(8) 分支、循环结构
分支紧凑格式:<表达式1if<条件else<表达式2分支结构if<条件1:<语句块1elif<条件2:<语句块2……else:<语句块N异常处理try:
Stella981 Stella981
3年前
AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式
1、Java中过滤出字母、数字和中文的正则表达式(1)过滤出字母的正则表达式\^(AZaz)\(2)过滤出数字的正则表达式\^(09)\(3)过滤出中文的正则表达式\^(\\\\u4e00\\\\u9fa5)\(4)过滤出字母、数字和中文的正则表达式\^(azAZ09\\\\u
Wesley13 Wesley13
3年前
MySQL(四)DQL语言——条件查询
摘要:条件查询;条件表达式,逻辑表达式,模糊查询,like,通配符,转义字符,escape关键字,betweenand,in,isnull,isnotnull,安全等于。条件查询语法:SELECT查询列表FROM表名WHERE筛选条件;123456我们根据筛选条件简
小万哥 小万哥
3个月前
Kotlin 布尔值教程:深入理解与应用示例
Kotlin中的布尔值是一种数据类型,仅能存储true或false两种状态,适用于表示二选一的情况,如开关或真假判断。布尔类型可通过Boolean关键字声明,并直接赋值为true或false。此外,Kotlin支持使用比较运算符创建布尔表达式,用于条件判断。条件语句包括if、else和elseif,允许根据不同条件执行特定代码块。特别地,在Kotlin中,if..else结构不仅能作为语句使用,还能作为表达式,即可以在条件判断的同时返回一个值。这种灵活性使得Kotlin在处理条件逻辑时更为简洁高效。