美文网首页scala
scala编程之控制内建结构

scala编程之控制内建结构

作者: 雨果等夏天 | 来源:发表于2017-02-21 17:34 被阅读6次

一 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的内建控制特点 只有if、while、for、try、match和函数调用。 scala从语法层面支...

  • 【2019-05-20】内建控制结构

    scala内建的控制结构:if、while、for、try、match和函数调用,scala从语法层面支持函数字面...

  • Chapter 07 《Built-in Control Str

    Scala中的内建控制结构非常少,只有if,while,for,try,match和函数调用。得益于Scala将函...

  • Scala的控制结构

    Scala提供了诸如if、while、for、try、match和函数调用等内建控制结构。 if while fo...

  • 《scala编程》第7章 内建的控制结构

    Scala 的内建的控制循环结构之所以少是因为函数字面量function literals的引入。不采取添加更高级...

  • Scala控制结构

    走过红尘的纷扰,弹落灵魂沾染的尘埃,携一抹淡淡的情怀,迎着清馨的微风,坐在岁月的源头,看时光婆娑的舞步,让自己安静...

  • Scala的內建控制结构

    內建控制结构(Build-in Control Structures) 需要注意的是,大多数的Scala控制结构,...

  • 快学Scala读书笔记002

    第2章 控制结构和函数 if/else Scala的if/else语法结构和Java或C++一样,不过在Scala...

  • Scala基础(4)- 控制结构

    If 表达式有返回值 你可以这样赋值, 这样就不必像下面这样,这里s就必须是一个变量了。 你甚至可以根据情况返回不...

  • Scala编程6 | 控制结构

    2016/11/06 1、if 与其他语言的if使用方法没有什么区别,Scala里面的if可以返回值。 2、whi...

网友评论

    本文标题:scala编程之控制内建结构

    本文链接:https://www.haomeiwen.com/subject/sckuwttx.html