scala if与while语句|scala 跳出循环|scala 守卫|scala yield | AiTi修炼|重剑无锋,拈花微笑
Header
Header

scala之if条件控制与while和for循环语句

if条件控制语句

  • 在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。
 例如:val age = 30; if (age > 18) 1 else 0

 ·可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 0

 ·另外一种写法,var isAdult = -1; if(age > 18) isAdult = 1 else isAdult = 0,但是通常使用上一种写法
  • if表达式的类型推断——返回类型为if与else语句公共父类型

由于if表达式是有值的,而if和else子句的值类型可能不同,此时if表达式的值是什么类型呢?Scala会自动进行推断,取两个类型的公共父类型。

·例如,if(age > 18) 1 else 0,表达式的类型是Int,因为1和0都是Int

·例如,if(age > 18) “adult” else 0,此时if和else的值分别是String和Int,则表达式的值是Any,Any是String和Int的公共父类型。

  • if后面没有else返回Unit类型

如果if后面没有跟else,则默认else的值是Unit,也用()表示,类似于java中的void或者null。例如,val age = 12; if(age > 18) “adult”。此时就相当于if(age > 18) “adult” else ()。

·将if语句放在多行中:默认情况下,REPL只能解释一行语句,但是if表达式通常需要放在多行。

·可以使用{}的方式,比如以下方式,或者使用:paste和ctrl+D的方式。

if(age > 18) { 
    "adult" 
} 
else if(age > 12) "teenager"
else "children"

scala循环语句

  • while do循环与java类似
    在Scala中有while do循环,基本语义与Java相同。
var n = 10
while(n > 0) {
  println(n)
  n -= 1
}
  • 与java差别的for循环
    在Scala中没有类似javafor循环,只能使用while替代for循环,或者使用简易版的for语句

·简易版for语句:var n = 10; for(i <- 1 to n) println(i) ·或者使用until,表式不达到上限:for(i <- 1 until n) println(i) ·在scala中同时也可以对字符串进行遍历,类似于java的增强for循环,for(c <- "Hello World") print(c) ps:to包含上限边界,until不包含上限边界
  • scala没有提供类似于java的break语句

    在 scala没有提供类似于java的break语句跳出循环,但是可以使用boolean类型变量、return或者Breaks的break函数来替代使用。具体用法如下:

import scala.util.control.Breaks._
breakable {
    var n = 10
    for(c <- "Hello World") {
        if(n == 5) break;
        print(c)
        n -= 1
    }
}
  • 高级循环——多重for循环
    以九九乘法表案例理解比较容易,具体如下:
for(i <- 1 to 9; j <- 1 to 9) {
  if(j == 9) {
    println(i * j)
  } else {
    print(i * j + " ")
  }
}
  • 高级循环——使用if守卫
    在scala的循环中可以使用if守卫,实现一些比较复杂但代码又比较简洁的功能,具体用法如下:如对1到100内的整数取偶数。
for(i <- 1 to 100 if i % 2 == 0) println(i)
  • 高级循环——for推导式:使用yield构造集合

在scala中的for循环语句配合使用yield可以快速构造新的集合,具体的使用方法如下:

for(i <- 1 to 10) yield i

rscala.com版权所有,本文scala之if条件控制与while和for循环语句转载请注明出处:http://rscala.com/index.php/513.html

该文章归档分类于 scala实践, 大数据基础

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

*

code