• Scala学习——基础篇


    【《快学Scala》笔记】

    一、基础

    1、变量
    val 标志符: 声明常量; 如,val answer = 1
    var 标志符:声明变量;

    • 类型推断:变量的类型由scala根据初始化变量的表达式推断而来;

      鼓励使用val;

      注:声明变量时不做初始化会报错。

    • 明确类型: scala的变量或函数的类型总是写在变量或函数的后面。
    1   val a:Int = 1
    2   val str:String = 2

    2、常用类型

    Scala支持7种数值类型和1种Boolean类型。

    • Byte/Char/Short/Int/Long/Float/Double
    • Boolean

    注:所有这些类型都是类,Scala并未区分基本类型与引用类型。如,可以调用1.toString方法。

    3、数值类型转换:

    Scala中使用方法,而非强制类型转换来做数值类型之间的转换。如,

      

    4、操作符

    Scala支持Java中绝大多数操作符,不过所有的操作符都是方法。如:

      a+b 是 a.+(b) 的缩写

    即:a 方法 b 是 a.方法(b) 的缩写,两种写法可以互换。

    【注:Scala不支持 ++ 和 -- 操作符。】

    5、函数调用和方法

    常用数学函数包括在scala.math包中,可以通过如下语句引入包。

    1 import scala.math._     // Scala中,字符 _ 是通配符,类似Java中的*

    另外,以scala开头的包,在引入或使用时可以省略scala。

    1 import math._     
    2 3 math.sqrt(2) 

    【注:Scala中没有静态方法。】

    不带参数的方法在调用时可以省略括号,如:

    1     "hello World".toString

    6、apply方法

    在Scala中通常使用类似函数调用的形式来访问数组、链表等的元素。如:

       

     上述调用中,"hello"(0)是"hello".apply(0)的调用。其中apply方法是StringOps类中的方法。

    二、控制结构和函数

    1、if语句也有返回值

    if语句称为条件表达式,如:

      

    条件表达式的结构为:  if( 判断条件 ) 值1 else 值2   ;结构类似于 Java的三目运算符,但是Scala不支持三目运算符

    该条件表达式可以用来初始化val常量。

    注:Scala中每个表达式都会返回值,如

      

    条件表达式返回了 () ,其中 () 表示Unit类,表示没有值。可以看作Java中的void类型。

    2、Scala不支持switch语句,但是Scala有更强大的模式匹配机制。

    3、块表达式

    Scala中使用 {} 括起来一系列表达式,其 {} 括起来包括 {} 的部分叫做块表达式,块表达式的值是块中的最后一个表达式的值。如,

      ,结果为7。

    可以使用块表达式为变量赋值,如:

      

    变量distance使用块表达式来赋值,其值为块中最后一个表达式的值。

    4、Scala中赋值语句的返回值为Unit,也可记作:Scala中赋值语句是没有返回值的。

      

    【注:  x = y = 3; 这种赋值形式在Scala中不支持,因为赋值语句在Scala中无返回值。 所以, += 、-= 、 ×= 、/= 等赋值操作符都是无返回值的。】

    5、输入、输出

    • 输入:

      常用的包括readLine从控制台读取一行输入,另外,readLine还可带有提示字符串,如:

      

      readInt、readByte、readDouble、readShort、readLong、readFloat、readBoolean、readChar分别用于读取各自类型的值。

    • 输出:

      print(内容)、println(内容)、printf; 其中println带换行;另外,printf支持C风格的字符串输出,如:

      

    6、循环操作

    Scala支持Java相同的while和do循环:

      

    Scala的for循环结构:( for循环中,变量前面不带var或val标志符)

    1     for( 变量 <- 表达式 ){ //让变量遍历表达式的所有值
    2       
    3         //操作        
    4     
    5     }    

    如:

      

    7、for循环的高级用法

    • 可以在for循环括号里同时包含多组" 变量 <- 表达式 "结构,组之间用分号分隔,如
    1     for( i <- 1 until 3; j <- 1 until 3 ){ 
    2           println( i*j )      
    3     }

    for循环的这种结构类似Java中的嵌套循环结构。

    另外,可以采用

    1     for{ i <- 1 until 3     //使用大括号,使用换行来分隔组
    2             j <- 1 until 3 }{  
    3 
    4             println( i*j )
    5     }
    • 可以为嵌套循环通过if表达式添加条件:

      

      if表达式是否添加括号,结果无变化。

      

      until 返回一个不包含上界的区间,如 1 until 3 返回 (1,2);

      

      to方法返回一个包含善洁的区间,如 1 to 3 返回(1,2,3);

    • for推导式

      如果for循环以yield开始,for循环会构造出一个集合,保存到集合中。

      

    8、Scala并不支持break和continue;

    9、函数—Scala支持函数式编程

    1     def 函数名(参数1:类型1, 参数2:类型2,... ):返回值类型 = {
    2     
    3         //函数体
    4 
    5     }

    例如:

      

    【注:对于有返回值的函数,不能省略 等号 ;  对于递归函数,不能省略函数返回值类型。】

      

    【注:无返回值的函数定义时可以省略 等号 ;无返回值的函数返回类型是 Unit;】

    10、带默认值的函数

      

    带默认值函数的声明,与Java中的带默认值的方法很类似。

    11、带名参数——在函数调用时通过明确指明参数与其对应值

      

    第一个函数调用为普通调用,第二个函数调用为带名参数调用。

    12、长度可变的参数列表

    通过在函数的形参列表最后一个参数的类型后,添加*,来定义一个接受任意多个参数的函数。

      

    13、过程,Scala中将没有返回值的函数叫做过程,如上图所示的函数。

    过程在定义的时候,参数列表之后无等号。

    14、懒值

    但val被声明为lazy时,变量的初始化将被延迟,直到我们首次对变量取值。例如:

    1     lazy val fileContent = scala.io.Source.fromFile("filename").mkString

    只有当我们读取fileContent值时,fileContent才会通过读取文件来进行初始化。若我们一直未读取fileContent值,这文件不会被读取。

    15、Scala没有“受检”异常——无需声明函数或方法可能会抛出某种异常。

  • 相关阅读:
    VMware虚拟机网络桥接模式下无法与主机ping通解决办法
    (一)编写Bootloader程序应该注意的一些问题
    使用TrueSTUDIO和MDK编译器生成.bin文件
    Linux开发板通过串口与电脑上位机通信
    STM32知识点
    仿真器SWD可不接复位引脚的原因
    ARM内核常用缩写含义
    三大范式(转)
    修改主键示例
    ROW_NUMBER用法详解
  • 原文地址:https://www.cnblogs.com/-crazysnail/p/3980024.html
Copyright © 2020-2023  润新知