Scala学习笔记(二)流程控制
2017-07-04 17:57
204 查看
scala中的基本控制结构有顺序、条件和循环三种方式,这个和其他的JVM语言是一致的,但是scala也有一些高级的流程控制结构类模拟匹配;在这里我们主要说if、for 、while等三种控制结构及企业最佳实践,并且在最后用spark源码说明
if流程控制
if条件表达式会根据if后面括号里面的boolean值来决定整个if表达式的值1.scala中if条件表达式是有值的,这个和java不一样
2.if条件表达式中可以进行类型推到,实质上将,类型推到的一半过程,就是根据变量的类型来推到确定变量的类型,这在很多复杂算法
的实现的时候,可以让我们省略掉变量的类型的书写,为复杂算法的实现提供了非常大的便利。
3.如果if后面没有else部分,默认的实现是if(。。)。。。else()
下面的代码节选自Spark的核心类SparkContext,在else部分虽然不返回有意义的结果,但是依旧没有省略else,而是使用了else{none}这种结构
其目的是为了确保if条件表达式的类型为处理逻辑需要的Opation类型,而不是Any类型,为下一部处理打下基础。
if(isEventLogEnable){some(logger)}else{None}
4.if表达式中如果有多条语句可以使用花括号包裹起来,但是这里就有一个问题了,{}中的多条语句最后一条是计算结果。
5.补充说明{…}代表了一个语句块,语句块是有值的,值就是最后一条语句的结果,类型就是其类型
6.if表达式可以用在for循环等其他控制结构中用于限制结束
for循环
for循环式不断地循环一个集合,然后根据for循环后面的{…}代码块部分会根据for循环()里面提取的集合item来作为{..}的输入进行流程控制。
for循环中加入的if叫做条件守卫,用于限制for循环(优化for循环,去掉不必要的执行步骤,或者说用于跳出for循环)
最后再次强调一下,在for循环中能够提取出什么内容取决于后面的集合的类型。
想跳出for循环的话,除了加入if守卫以外,还可以使用return关键字。
object ControlStructures { def main(args: Array[String]): Unit = { println("scala") var age = 10 val result = if (age > 25) "Worker" else "Student" //此时因为Worker和Student是String类型,所以result也是String类型。 println(result) val result2 = if (age > 18) "Adult" else 1 var x, y = 0 val result4 = if (age < 18) { x = x + 1; y = y + 1; x + y } else 0 println(result4) println("=======for部分代码======") for(i<-0 to 5 if i%2 == 0){ println(i) } var flag = true var sum=0 /*for(i<-0 to 5 if flag){ sum+=i; if(sum>10) flag=false }*/ println("sum="+sum) for(item <- "Spark") print(item+",") println() for(item <- "Hello Spark".split(" ")) println(item) sum=0 for(i<-0 to 5 ){ sum+=i; if(sum>10) return } println(sum) println("=======while部分代码======") } }
相关文章推荐
- 【Scala学习笔记】2. 函数定义、流程控制、异常处理
- Scala学习笔记05【Scala函数定义、流程控制、异常入门】
- Scala 学习笔记(5)-流程控制语句
- scala学习笔记(四)流程控制
- java学习笔记《java面向对象编程》——流程控制
- PL/SQL学习笔记[5]-流程控制语句
- Delphi 2010学习笔记(16)---流程控制的注意事项---2011-01-21
- jBPM-jPDL学习笔记——流程设计与控制
- JSTL学习笔记2---流程控制标签
- (JAVA SE 学习笔记)Java.SE.第007讲.流程控制语句.续.Flow.Control.Statement.Cont
- Shell学习笔记-流程控制
- jBPM-jPDL学习笔记——流程设计与控制
- T-SQL学习笔记-程序设计基础-流程控制语句
- thinking in java 学习笔记(二)之控制执行流程
- PHP学习笔记(25)流程分支控制结构 (26)PHP实现简单计算器
- perl学习笔记四----流程控制
- Shell脚本学习笔记(四)--流程控制
- Shell脚本学习笔记(四)--流程控制
- LAMP兄弟连PHP课程学习笔记 第四天 流程控制分支语句
- Power Shell 学习笔记(六)流程控制语句之分支语句