2.Scala-基础

Posted lxl616

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.Scala-基础相关的知识,希望对你有一定的参考价值。

  第2章 Scala 基础

2.1 声明值和变量

  Scala 声明变量有两种方式,一个用 val,一个用 var。
  val / var 变量名 [: 变量类型] = 变量值
  val 定义的值是不可变的,类似于一个常量。
技术图片
  
  Scala REPL 默认为匿名变量分配 val。
技术图片

 

  var 声明的变量是可变的。
技术图片

技术图片

注:var 和 val 关键字只标识引用本身是否可以指向另一个不同的对象,它们并未
表明其所引用的对象是否可变。为了减少可变性引起的 bug,应该尽可能地使
用不可变变量。变量类型可以省略,解析器会根据值进行推断。val 和 var 声
明变量时都必须初始化。

 

2.2 常用类型

Scala 有 8 种数据类型:Byte、Char、Short、Int、Long、Float、Double
以及 Boolean。
  ? Boolean: true 或者 false
  ? Byte: 8 位, 有符号
  ? Short: 16 位, 有符号
  ? Int: 32 位, 有符号
  ? Long: 64 位, 有符号
  ? Char: 16 位, 无符号
  ? Float: 32 位, 单精度浮点数
  ? Double: 64 位, 双精度浮点数
 
  跟 java 中的数据类型不同,Scala 并不区分基本类型和引用类型,所以这
些类型都是对象,可以调用相对应的方法。String 直接使用的是
java.lang.String. 不过,由于 String 实际是一系列 Char 的不可变的集合,
Scala 中大部分针对集合的操作,都可以用于 String,具体来说,String 的这
些方法存在于类 scala.collection.immutable.StringOps 中。 由于 String 在需要
时能隐式转换为 StringOps,因此不需要任何额外的转换,String 就可以使用
这些方法。
 
  每一种数据类型都有对应的 Rich* 类型,如 RichInt、RichChar 等,为基
本类型提供了更多的有用操作。

 技术图片

  由定义在 Predef 中的隐式转换完成将相应类型转换成 Rich*,然后调用
Rich*的相对应方法。【隐式转换后面会讲】
  在 Scala 中通过方法进行类型转换,不像 Java 的强制类型转换。
技术图片
注:Scala 中没有强制转化,需要通过方法进行类型的转化。
 
  Scala 中,所有的值都是类对象,而所有的类,包括值类型,都最终继承
自一个统一的根类型 Any。统一类型,是 Scala 的又一大特点。更特别的是,
Scala 中还定义了几个底层类(Bottom Class),比如 Null 和 Nothing。
技术图片
 
 
  1) Null 是所有引用类型的子类型,而 Nothing 是所有类型的子类型。Null 类
    只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任
意引用类型,但是不能赋值给值类型。
  2) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你
    这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还
能跟要求返回值的方法兼容。
  3) Unit 类型用来标识过程,也就是没有明确返回值的函数。 由此可见,Unit
    类似于 Java 里的 void。Unit 只有一个实例,(),这个实例也没有实质的意
义。  

 

 

 

2.3 算术和操作符重载

  +-*/%可以完成和 Java 中相同的工作,但是有一点区别,他们都是方
法。你几乎可以用任何符号来为方法命名。
 
    a.方法(b) 等于 a 方法 b
技术图片
注:Scala 中没有++、--操作符,需要通过+=、-=。

 

2.4 调用函数和方法

除了方法,Scala 还提供了函数,比如数学函数。
 
调用函数:
需要引入函数包 import 包名._  _是通配符,等同于 java 中的*

 技术图片

 
调用静态方法:
Scala 中没有静态方法,一般通过单例对象或者伴生对象进行实现。

技术图片

 
调用对象方法:
对象实例调用方法

 技术图片

 

 

2.5 apply、update 方法

apply 方法是调用时可以省略方法名的方法。用于构造和获取元素
    “Hello”(4) 等同于 “Hello”.apply(4)
    Array(1,2,3) 等同于 Array.apply(1,2,3)

 

在 StringOps 中你会发现一个 def apply(n: Int): Char 方法定义。
update 方法也是调用时可以省略方法名的方法,用于元素的更新,
    arr(4) = 5 等同于 arr.update(4,5) 

 

 

 

 

2.6 option 类型

  Scala 为单个值提供了对象的包装器,表示为那种可能存在也可能不存在
的值。他只有两个有效的子类对象,一个是 Some,表示某个值,另外一个是
None,表示为空,通过 Option 的使用,避免了使用 null、空字符串等方式来
表示缺少某个值的做法。 
技术图片

 

scala> val map1 = Map("name" -> "Lion", "age" -> "22")
map1: scala.collection.immutable.Map[String,String] = Map(name -> Lion, age -> 22)

scala> map1.get("name")
res0: Option[String] = Some(Lion)

scala> println(res0.get)
Lion

scala> map1.get("sex")
res2: Option[String] = None

scala> map1("name")
res3: String = Lion

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于2.Scala-基础的主要内容,如果未能解决你的问题,请参考以下文章

Scala-Unit-2-Scala基础语法1

Scala基础学习

Scala执行流程与基础语法

Scala执行流程与基础语法

Scala的安装,入门,学习,基础

Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析