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 日 阅读数: 773
用户头像

正向成长 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基础-语法特性(一):类型和变量