写点什么

Scala 基础 - 语法特性 (一):类型和变量

用户头像
正向成长
关注
发布于: 2020 年 11 月 13 日
Scala基础-语法特性(一):类型和变量

统一类型

在数据类型方面 Scala 与 Java 的最大区别在于:Scala 没有所谓的基本数据类型,秉承一切皆对象的彻底性,所有的数据类型和函数都是以对象的形式存在。 Scala 类型层次结构:

Any 是所有类型的超类,也称顶级类型,它定义了一些通用的方法如 equals、hashCode 和 toString,Any 有两个之间的子类 AnyValue 和 AnyRef。

  • AnyVal 代表值类型,它有 9 个预定义的非空的值类型,分别是 Double、Float、Long、Int、Short、Byte、Char、Unit 和 Boolean。Unit 是不带任何意义的类型,Unit 可以作为返回类型。

  • AnyRef 代表引用类型,所有非值类型都被定义为引用类型,用户声明的自定义类型都属于 AnyRef 引用类型的子类型,同时在 Java 运行环境中调用 Scala。AnyRef 会被当做 java.lang.Object 基类。


Nothing 是所有类型的子类型,包括值类型和引用类型,同时 Nothing 也是 Null 的子类型,也称为底部类型。没有一个值是 Nothing 类型的。Nothing 类型通常用于程序非正常结束的信号,可以被理解为不定义值的表达类型,在非正常返回时使用。这点与 Java 中返回 Null,C++中用-1 作为返回符类似。


Null 是所有引用类型的子类型(即 AnyRef 的任意子类型),它有一个单例值由关键字 Null 所定义。Null 主要是使得 Scala 满足和其他 JVM 语言的互操作性,但是 null 是非常容易引发程序崩溃,同时 Scala 也采用了各种机制来避免使用 Null 类型。


下面实现将各种类型的数据存放在 List 中,并进行遍历打印:

package HelloScala
object HelloScala { def main(args: Array[String]): Unit = { val list:List[Any] = List( "A String", // 字符串 68, // 整形 "c", // 字符 """Hello,Nice to meet you""", // 多行字符串 () => "an anonymous function returning a string" // 函数 ) list.foreach(element => println(element)) }}
复制代码


变量

Scala 的变量声明和 Java 有很大区别,Scala 变量可分为

  • 变量,指的是在程序运行过程中值可能会改变的量,用关键词var声明。

  • 常量,指的是程序运行中值不会发生改变的量,使用关键词val声明常量,如果对常量修改在编译时会报错。

Scala 支持语法糖,可以像 Python 一样省略变量类型,编译器自动根据变量和常量的初始值推测类型。

object HelloScala {  def main(args: Array[String]): Unit = {    // 变量,可以被修改    var myVar : String  = "Spark Streaming"    // 常量,不可修改,若修改,编译会报错    val myVal : String  = "Spark Streaming"    myVar = "Action"    println(myVar + ", " + myVal)    // 语法糖,编译器自动根据变量和常量的初始值推测类型    var age = 18  }}
复制代码



参考资料

  • 书籍《Spark Streaming 实时流式大数据处理实战》

发布于: 2020 年 11 月 13 日阅读数: 915
用户头像

正向成长

关注

正向成长 2018.08.06 加入

想要坚定地做大规模数据处理(流数据方向),希望结合结合批处理的传统处理方式,以及之后流批混合处理方向进行学习和记录。

评论

发布
用户头像
该评论已删除
2020 年 11 月 13 日 20:37
回复
我主要是对自己平时的学习和日常使用的心得进行一些记录和分享,也希望可以遇到有相同爱好的一起进步,如果你觉得内容可以,很高兴进行同步
2020 年 11 月 14 日 10:50
回复
您的联系方式方便告诉我一下吗,微信或者QQ都可以
2020 年 11 月 14 日 11:03
回复
QQ:601954412,您备注一下
2020 年 11 月 19 日 18:03
回复
没有更多了
Scala基础-语法特性(一):类型和变量