vlambda博客
学习文章列表

scala控制结构:条件表达式与循环

今天带大家一起过一遍scala语言的基础知识,涵盖if条件表达式、for循环与while循环。


if条件表达式

Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
新建T e st.scala,用于测试我们撰写的代码。
   
     
     
   
cd /usr/ local/scala
vim ./mycode/test.scala
请在Test.scala文件中输入以下代码。
        
          
          
        
          
            
            
          
object Test {
    def main(args: Array[String]) {
      var x =  10;

       if( x <  20 ){
         println( "x < 20");
      }
   }
}
  
    
    
  
保存Test.scala文件,然后,使用下面命令执行代码
    
      
      
    
$ scalac Test.scala 
$ scala Test
x <  20
和Java一样,if语句可以采用各种嵌套的形式,比如:
    
      
      
    
val x =  3
if (x> 0) {
    println( "This is a positive number")
else  if (x== 0) {
    println( "This is a zero")
else {
    println( "This is a negative number")
}
但是,有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量,比如:
    
      
      
    
val x =  6
val a =  if (x> 01  else - 1

while循环

Scala中也有和Java类似的while循环语句。
  
    
    
  
var i =  9
while (i >  0) {
    i -=  1
    printf( "i is %d\n",i)
}
当然也会有do-while语句,如下:
  
    
    
  
var i =  0
do {
    i +=  1
    println(i)
} while (i< 5)

for循环

Scala中的for循环语句格式如下:
  
    
    
  
for (变量<-表达式) 语句块
其中,“变量<-表达式”被称为“生成器(generator)”。
下面给出一个实例:
  
    
    
  
for (i <-  1 to  5) println(i)
在上面语句中,i不需要提前进行变量声明,可以在for语句括号中的表达式中直接使用。语句中,“<-”表示,之前的i要遍历后面1到5的所有值。
语句执行结束后,会打印出下面结果:
  
    
    
  
1
2
3
4
5
当然,在前面的Range那一节,我们介绍了Range的使用方法,因此,这里可以改变步长,比如设置步长为2,如下所示:
  
    
    
  
for (i <-  1 to  5 by  2) println(i)
这样会得到下面结果:
  
    
    
  
1
3
5

但是,有时候,我们可能不希望打印出所有的结果,我们可能希望过滤出一些满足制定条件的结果,这个时候,就需要使用到称为“守卫(guard)”的表达式。比如,我们只希望输出1到5之中的所有偶数,可以采用以下语句:
  
    
    
  
for (i <-  1 to  5  if i% 2== 0) println(i)
这样,就只会得到下面的偶数结果:
  
    
    
  
2
4
有时候,我们需要对上述过滤后的结果进行进一步的处理,这时,就可以采用yield关键字,对过滤后的结果构建一个集合。比如,我们可以采用以下语句:
  
    
    
  
scala>  for (i <-  1 to  5  if i% 2== 0) yield i
res3: scala.collection.immutable.IndexedSeq[Int] = Vector( 24)
上面这种带有yield关键字的for循环,被称为“for推导式”。这个概念源自函数式编程,也就是说,通过for循环遍历一个或多个集合,对集合中的元素进行“推导”,从而计算得到新的集合,用于后续的其他处理。

参考链接:
http://dblab.xmu.edu.cn/blog/spark/
https://www.runoob.com/scala/scala-tutorial.html

scala控制结构:条件表达式与循环

历史推荐





数据分析与挖掘
数据结构与算法
机器学习与大数据组件
欢迎关注,感谢“在看”,随缘稀罕~