美文网首页
《快学Scala(第二版)》-CH2 控制结构和函数

《快学Scala(第二版)》-CH2 控制结构和函数

作者: xhades | 来源:发表于2017-12-10 11:42 被阅读0次

    少年壮志不言愁
    劝君惜取少年时

    • 在Scala中if/else结构有返回值,这个值就是跟在if/else之后的表达式的值

       scala> val x = 2
       x: Int = 2
       scala> val s = if(x > 1) 1 else -1
       s: Int = 1
      
    • Scala中的表达式有类型,例如上面表达式if/else的类型是Int,又比如if (x>0) "a" else -1的类型是两个分支的公共超类型Any
      如果没有else,Scala中处理等同于if(x > 1) 1 else (),引入类Unit
      Unit类型只有一个值,写作()

    • Scala中,{ }块包含一系列表达式,结果也是一个表达式。块中最后一个表达式的值就是的值。

    • 输出使用print/println函数

    • readLine从控制台读取一行输入,readIntreadDoublereadBytereadShortreadLongreadFloatreadBooleanreadChar读取数字、Boolean和字符

    • 循环

      • for (i <- 表达式) 让变量i遍历<-右边的表达式的所有值
      • Scala中,循环使用并不频繁,通常可用某个函数处理。
      • Scala没有提供break或者continue语句跳出循环,这里举例一下使用Breaks对象中的break方法跳出循环
        object BreakLoop {
         |   def main(args: Array[String]) {
         |     val a = 0
         |     val numList = List(1, 2, 3, 4, 5, 6)
         |     val loop = new Breaks
         |     loop.breakable {
         |       for( a<- numList) {
         |         println( "a is : " + a )
         |         if( a == 3 ){
         |         loop.break
         |         }
         |        }
         |      }
         |      println("Loop End")
         |     }
         | }
        
    • 高级for循环

      • 变量<-表达式的形式提供多个生成器,每个生成器可以带上if守卫
      • for推导式:如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
    • 定义函数:函数名、参数和函数体。Scala编译器可以通过=右侧的表达式的类型推断出函数返回类型

    • 接收可变长度参数列表的函数

       def sum(args:Int*)={ var result = 0; for(arg <- args) result += arg; result}
       val s = sum(1,2,3,4,6)
      

      函数得到的是一个类型为Seq的参数,用for循环访问每一个元素。但如果已经有一个值的序列,则不能直接传入函数中,需要告诉编译器希望这个参数被当做参数序列处理,追加:_*.

      val s = sum(1 to 5:_*) // 此处将1 to 5做参数序列处理
      
    • 过程: 如果函数体包含在花括号中但没有前面的=号, 那么返回类型就是Unit。这样的函数称为过程。过程不返回值

    • 懒值: 当val被声明为lazy时,它的初始化将被推迟,直到首次对它取值。懒值对于开销较大的初始化语句有用,是介于val和def的中间状态,val在被定义时即被取值;lazy在被首次使用时取值;def在每一次被使用时取值。懒值并非没有额外开销,每次访问懒值时都会有一个方法被调用,这个方法会以线程安全的方式检查该值是否已被初始化

    • 异常: Scala没有“受检”异常,不需要声明说函数或方法可能会抛出某种异常。控制器将在离抛出点最近的处理器中恢复,如果没有找到符合要求的异常处理器,则程序退出。

    相关文章

      网友评论

          本文标题:《快学Scala(第二版)》-CH2 控制结构和函数

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