2.scala控制结构

    xiaoxiao2021-04-13  32

            scala总的控制结构跟java有很大的区别,以下是scala特色的控制结构知识点总结:

    1.scala中的if表达是有返回值的

    2.if条件表达式可以进行类型推导,类型推导的一般过程就是根据变量的值的类型来确定变量的类型;类型推导带来的好处就是可以省略掉变量类型的书写,为复杂算法的实现,提供了非常大便利;

    3.scala中允许if语句不跟else部分,默认的实现是if(...) ... else(),注意这个else后面的()表示Unit

    4.spark源码中有个不错的示例:

    _eventLogger = if (isEventLogEnabled) { val logger = new EventLoggingListener(_applicationId, _applicationAttemptId, _eventLogDir.get, _conf, _hadoopConfiguration) logger.start() listenerBus.addListener(logger) Some(logger) } else { None } 这里写else{ None }是有原因的,若不写else{ None }这不会返回Option类型,而是返回Any类型

    5.scala中{...}代表一个语句块,语句块是有值的,值就是语句块的最后一个条语句,其类型是最后一条语句的值的类型

    6.for循环是不断的循环一个集合,但for循环后面的{...}代码块部分会根据for循环(...)里面提取集合的item来作为{...}的输入进程流程控制

    7.for循环加入的if叫做条件守卫,用于限制for循环

    8.for循环中能够提取出什么内容取决于后面的集合的类型!

    object ControlStructures { def main(args: Array[String]): Unit = { val age = 30; val result = if(age > 30) "Worker" else "Student" //此时"Worker"和"Student"都是字符串,所以result也是字符串 println(result) //result2是Any类型 val result2 = if(age > 18) "Adult" else 1 //此时因为if表达式中的else两侧的内容一个是字符串类型,另外一个是整数类型,所以result2取的类型是两者的公共父类 val result3 = if(age > 18) "Adult" //result3也是Any类型的,因为默认是if(...) ... else () println(result3) var x,y = 0 val result4 = if(age > 18) { x = x + 1 y = y + 1 x + y }else 0 println(result4) // <- 表示提取符 for(i <- 0 to 5 if i % 2 == 0) { println(i) } println("-------------------------- for循环 --------------------------") var flag = true var sum = 0 for(i <- 0 to 5 if flag) { sum += i if(5 == i) flag = false } println("sum = " + sum) // sum = 0 // for(i <- 0 to 6) { // sum = sum + i // if(5 == i) return // return 返回是方法级别的 // } // println("sum with return = " + sum) for(item <- "Hello Spark".split(" ")) println(item) println("-------------------------- while循环 --------------------------") import scala.util.control.Breaks._ flag = true breakable{ while(flag) { for(item <- "Spark") { println(item) if(item == 'r') { flag = false break //跳出了for循环 } } } } println("while finished") } }

    转载请注明原文地址: https://ju.6miu.com/read-668410.html

    最新回复(0)