scala编程之控制内建结构

一 scala的内建控制特点

  1. 只有if、while、for、try、match和函数调用。
  2. scala从语法层面支持函数字面量导致scala内建控制结构少。
  3. 几乎所有的scala内奸控制对象都会产生值(while等除外),这样有助于缩短代码(不在需要临时变量保存控制结构中的计算结果)。

二 scala 内建控制结构之if

//  if 方式1:
var filename_1="default.txt"
if(!args.isEmpty)
  filename_1=args(0)

// if 方式2: 优化上面的代码
//  1:代码易于阅读和重构。
//  2:主要的优点:使用了val而不是var。
//    2.1 val体现了函数式编程的风格,并且具有与java的final变量类似的效果。
//    2.2 能够更好地支持等效理论(equalational reasoning).在表达式没有副作用的情况下,引入的变量等效于计算它的表达式
val filename=
  if(!args.isEmpty) args(0)
  else "default.txt"

三 scala内建控制之while与dowhile

  1. 两者与java的一样。
  2. while与do-while 之所以被称为“循环”,而不是表达式,是因为他们不能产生有意义的结果,结果类型为Unit “()”。

`

//  while 循环
 def fun2(x: Int, y: Int): Unit ={
var a = x
var b = y
while (a != 0 ) {
  val tmp = a
  a =  b % a
  b = tmp
}
b
println("b=" + b)

}`

 // if 方式2: 优化上面的代码
//  1:代码易于阅读和重构。
//  2:主要的优点:使用了val而不是var。
//    2.1 val体现了函数式编程的风格,并且具有与java的final变量类似的效果。
//    2.2 能够更好地支持等效理论(equalational reasoning).在表达式没有副作用的情况下,引入的变量等效于计算它的表达式
val filename=
  if(!args.isEmpty) args(0)
  else "default.txt"
  1. 尽量对while的使用进行质疑,如同质疑var的使用一样。实际中while循环通常不是更新var就是执行IO。尽量用别的方式实现同样的功能。

四 Scala编程之for表达式

//  for表达式:
//1  for 表达式 之枚举集合类:能够做的最简单的事情就是把所有元素都枚举一遍。其他语法你需要借助一个变量,随时会面临超位溢出。
//2  for 表达式之 过滤
  def fun6(): Unit ={
    val fileHere = (new File(".//src")).listFiles()
//  通过发生器(generator) 遍历每一个元素。
    for (file <- fileHere
         if file.getName.endsWith("Scala_6.scala")
    ) println(fileLines(file).length)
}

//3   for 表达式之Range类型。
  def fun7(): Unit ={
//  to 包含Range的上边界,until 不包括Range的上边界
    for (i <- 1 until 4)
      println(i)
  }

  //3  for 表达式之 嵌套枚举
  val fileHere = (new File(".")).listFiles()
//  def fun8(pattern:String)=(
//      for(
//        file <- fileHere
//        if file.getName.endsWith(".scala")
//        line <- fileLines(file)
//      )
//  )

//  4 for表达式之 制造新的集合;
//  格式:for {字句} yield (循环)
  def fun8(): Unit ={
    val fileHere = (new File(".//src")).listFiles()
    val forLineLengths = for {
      file <- fileHere
      if file.getName.endsWith(".scala")
      line <-  fileLines(file)
      trimmed = line.trim
      if trimmed.matches(".*for.*")
    } yield  trimmed.length
  }
  def fileLines(file:File)= scala.io.Source.fromFile(file).getLines.toList

五 Scala编程之 try-finally

//  scala 编程之try-finally
//  1:java的try-finally 不产生值,scala的行为会产生值。
  def fun9(): Unit ={
    try {
      val f = new FileReader("input.txt")
//      使用并关闭流文件
    } catch {
      case ex: FileNotFoundException => print("文件没有发现") // 处理丢失的文件
      case ex: IOException => // 处理其他的IO异常
    }finally{
//      文件、套接字、数据库链接
    }
  }

六 Scala编程之match#

1:详见书籍

七 Scala编程之 不在使用break和continue#

1:用if与while代替,详见书籍

八 Scala编程之变量范围

1:scala中内部范围与外部范围可以定义相同名的变量,在java中实不允许的。scala中内部的同名变量会遮蔽外部的同名变量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 读《快学Scala 》一书的摘要 Scala 运行于JVM之上,拥有海量类库和工具,兼顾函数式编程和面向对象。 在...
    abel_cao阅读 1,293评论 0 8
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,350评论 0 16
  • 这篇讲义只讲scala的简单使用,目的是使各位新来的同事能够首先看懂程序,因为 scala 有的语法对于之前使用习...
    MrRobot阅读 2,947评论 0 10
  • 文/李瑶 无论是悄无声息或是惊天动地的离去,我们,应该都有过吧! 我知道我们每个人都在经历无数次的遇见和选...
    yaobrave阅读 336评论 0 0
  • 男儿有泪不轻弹,只因未到伤心处。唉,媳妇儿不搭理我。
    b8130e46c9e2阅读 247评论 0 1