查看 DataCamp 新上线的 Scala 课程:Introduction to Scala 。
Scala 在大数据领域与 Apache Spark 搭配使用时,被数据科学家广泛采用以处理海量数据。它既是面向对象的语言,也是函数式编程语言,并具备许多其他重要特性,概括如下:
Scala 是静态类型语言,变量在使用前必须定义数据类型。类型检查在编译时完成,而非运行时。
它还是一种“强类型”语言,变量在参与运算前会进行类型检查。
它支持类型推断,编译器可以根据表达式或字面量推断类型,因此声明变量类型是可选的。
在本教程中,您将学习以下主题:
变量
变量是内存中的具名空间,编译器会根据相应变量的数据类型分配保留的存储位置。Scala 中变量按如下语法声明:
val or val variable_name: variable_datatype = value;
技术支持
在上述语法中,变量可以使用“var”或“val”两种关键字之一来定义。先写“variable_name”作为新变量名,后跟冒号。变量的数据类型为“variable_datatype”,可以是任意有效的数据类型。之后将“value”赋给“variable_name”。
例如:
val varValue: Byte = 8 ;
技术支持
“val”是定义变量的关键字,“varValue”是变量名。它的数据类型为“Byte”,值为 8。Byte 是 8 位有符号值,取值范围为 2−7 到 27 −1。
上述“variable_datatype”可以是 Scala 中的任意数据类型,例如:
Int:32 位有符号(正或负)整数,取值范围为 2−31 到 231 −1。
Byte:8 位有符号整数,取值范围为 2−7 到 27 −1。
Short:16 位有符号整数,取值范围为 2−15 到 215 −1。
Float:可以是 32 位或 64 位。
类似地,其他数据类型如 Long 、Char 、Boolean 、Char 、String 、Boolean 、Null 也各自有其范围,更详尽的说明见教程 Beginner’s Guide to Scala 。另外,“variable_datatype”应以大写字母开头,例如 Int 的“I”,这也表明上述数据类型在 Scala 中都是对象。
在 Scala 中定义变量的规则
在 Scala 中定义变量的规则与约定如下:
变量名采用小驼峰命名。例如变量名“nameOfGirl”以小写字母“n”开头,之后每个单词的首字母如“O”和“G”大写。
变量名不得使用 Scala 中的保留字或关键字。
变量名可以包含美元符号“$”和下划线“_”,但不允许其他特殊字符(如“#”“&”等)。同时,不鼓励使用下划线。
变量名中不允许出现空白(制表符、空格)。
变量名必须以字母开头,不能以数字或其他字符开头。
可变变量
可变变量允许在变量声明之后修改其值。
可变变量的语法如下:
var variable_name : variable_datatype = value;
技术支持
可变变量也可以按如下方式定义:
var variable_name = value;
技术支持
可变变量示例如下:
var nameOfThing: String = "Car" ;
技术支持
以上示例使用关键字 var 来定义可变变量。变量名为“nameOfThing”,后跟冒号,变量类型为“String”。其在内存中存储的值为“Car”。
上述可变变量也可用不同语法书写如下:
var nameOfThing = "Car" ;
技术支持
如上所示,您可以不显式声明变量的数据类型。Scala 编译器会自动将其判断为“String”类型,这称为类型推断 。
您可以像下面这样轻松修改变量的值:
nameOfThing = "Bike" ;
print ( nameOfThing)
技术支持
变量的值将从“Car”变为“Bike”。输出为“Bike”,因为关键字“var”允许您更改变量的值(来源:Variables in Scala )。
不可变变量
不可变变量一经创建其值便不可更改,使用“val”关键字声明。
不可变变量的语法如下:
val variable_name : variable_data type = value;
技术支持
不可变变量也可按如下方式定义:
val variable_name = value;
技术支持
不可变变量示例如下:
val numberOfThing: Int = 2 ;
技术支持
以上示例使用关键字 val 来定义不可变变量,变量名为“numberOfThing”。随后是冒号与变量类型“Int”,存储在内存中的值为 2。
上述不可变变量也可用不同语法书写如下:
val numberOfThing = 2 ;
技术支持
如上所示,您可以不显式声明变量的数据类型,Scala 编译器会自动判断其为“Int”类型。该过程称为类型推断 (来源:Variables in Scala )。
您不能像下面这样更改变量的值:
numberOfThing = 7 ;
技术支持
上述代码将导致错误,例如“error: not found: value numberOfThing”,表明不允许重新赋值,如下所示:
多重声明与赋值
在 Scala 中,可以使用“var”关键字进行多重声明,变量名用逗号分隔,并使用“=”为变量赋值。
var ( x, y, z) = ( 5 , 4.5 , "Sit" )
技术支持
在上述示例中,您可以看到变量 x、y、z 分别被赋值为 5、4.5 和 “Sit”。
同样地,也可以在一行中使用“val”关键字进行多重赋值,变量名用逗号分隔,并使用“=”为变量赋相同的值。
val a, b, c = 1 ;
技术支持
在上述示例中,变量 a、b、c 都被赋值为 1。
变量的作用域
作用域指变量在特定代码块内的可见性与生命周期。变量可以定义在局部作用域或全局作用域中。例如:
var globalVar = 10
def sub ( ) {
var difference = 9 - 4 ;
}
print ( difference)
print ( globalVar)
技术支持
在上述代码中,变量“difference”处于局部作用域,它在方法“sub”内部声明,减法运算在该方法内有效,但在方法“sub”之外打印其值会导致错误。与此同时,全局作用域中的变量“globalVar”可以在程序的任意位置访问并进行操作。
Scala 中变量有三种作用域(来源:Scala- Variables ):
局部变量
字段
方法参数
局部变量
局部变量是在方法内部声明的可变或不可变变量,只能在该方法内访问,方法外不可见。
您可以参考下面的简单示例来了解局部变量:
class Perimeter
{
def triangle ( )
{
var side1 = 10 ;
var side2 = 20 ;
var side3 = 30 ;
var total = side1+ side2+ side3;
print ( "Perimeter of the triangle is: " + total) ;
}
}
object Test
{
def main ( args: Array[ String] )
{
val p1 = new Perimeter( )
p1. triangle( )
}
}
技术支持
defined class Perimeter
defined object Test
技术支持
上述代码的输出为:
The perimeter of the triangle is: 60
该程序包含一个名为“Perimeter”的类和一个名为“Test”的对象,其中有一个名为 triangle 的方法,包含三个可变变量 side1、side2、side3。计算与结果输出均在该方法内完成,从而得到正确结果。
字段
在类内定义的变量称为字段变量,既可以是可变的,也可以是不可变的。如果变量在类内声明但不在任何方法内,其访问修饰符默认是 public,可在程序的任意位置访问。然而,private 变量只能在其定义的类内访问,超出类的作用域(甚至在对象中)都无法访问。
class FieldExample
{
var value1 = 10 ;
private var value2 = 30 ;
def operation ( )
{
println( "Value of value1:" + value1)
}
println( "Value of value2: " + value2) ;
}
object Demo
{
def Main ( args: Array[ String] )
{
val obj = new FieldExample( )
obj. operation( )
print ( obj. value1) // Valid
print ( obj. value2)
}
}
技术支持
defined class FieldExample
defined object Demo
技术支持
上述代码的输出为:
Value of value2: 30 Value of value1:10 10
该程序包含一个名为“FieldExample”的类、一个名为“Demo”的对象,以及一个名为“operation”的方法。公共变量 value1 可通过点号访问,其打印结果为 10。私有变量 value2 的值为 30,尝试在类外访问并打印将导致错误。
方法参数
方法参数是在调用方法时接收值的变量,必须是使用“val”关键字定义的不可变变量。同时,当对其建立引用时,变量也可以在方法外被访问。
您可以参考下面的简单示例来了解方法参数:
class Triangle
{
def calculate ( height: Int, width: Int)
{
var result = 0.5 * ( height+ width) ;
println( "Area of triangle is: " + result) ;
}
}
object Area
{
def main ( args: Array[ String] )
{
val a = new Triangle( )
a. calculate( 4 , 5 ) ;
}
}
技术支持
defined class Triangle
defined object Area
技术支持
上述代码的输出为:
Area of triangle is: 4.5
该程序包含一个名为“Triangle”的类,其中的方法“calculate”带有两个方法参数 height 与 width。在通过对象实例 a 调用“calculate”时传入整数 4 和 5。
结论
恭喜您,顺利完成本教程的学习!
本教程介绍了 Scala 的变量、定义变量的规则、不同类型的变量、多重声明与赋值,以及变量的作用域。
如果您希望进一步学习 Scala,请参加 DataCamp 的 Introduction to Scala 课程。
查看 DataCamp 新上线的 Scala 课程:Introduction to Scala。
Scala 在大数据领域与 Apache Spark 搭配使用时,被数据科学家广泛采用以处理海量数据。它既是面向对象的语言,也是函数式编程语言,并具备许多其他重要特性,概括如下:
在本教程中,您将学习以下主题:
变量
变量是内存中的具名空间,编译器会根据相应变量的数据类型分配保留的存储位置。Scala 中变量按如下语法声明:
在上述语法中,变量可以使用“var”或“val”两种关键字之一来定义。先写“variable_name”作为新变量名,后跟冒号。变量的数据类型为“variable_datatype”,可以是任意有效的数据类型。之后将“value”赋给“variable_name”。
例如:
“val”是定义变量的关键字,“varValue”是变量名。它的数据类型为“Byte”,值为 8。Byte 是 8 位有符号值,取值范围为 2−7 到 27−1。
上述“variable_datatype”可以是 Scala 中的任意数据类型,例如:
类似地,其他数据类型如 Long、Char、Boolean、Char、String、Boolean、Null 也各自有其范围,更详尽的说明见教程 Beginner’s Guide to Scala。另外,“variable_datatype”应以大写字母开头,例如 Int 的“I”,这也表明上述数据类型在 Scala 中都是对象。
在 Scala 中定义变量的规则
在 Scala 中定义变量的规则与约定如下:
可变变量
可变变量允许在变量声明之后修改其值。
可变变量的语法如下:
可变变量也可以按如下方式定义:
可变变量示例如下:
以上示例使用关键字
var来定义可变变量。变量名为“nameOfThing”,后跟冒号,变量类型为“String”。其在内存中存储的值为“Car”。上述可变变量也可用不同语法书写如下:
如上所示,您可以不显式声明变量的数据类型。Scala 编译器会自动将其判断为“String”类型,这称为类型推断。
您可以像下面这样轻松修改变量的值:
变量的值将从“Car”变为“Bike”。输出为“Bike”,因为关键字“var”允许您更改变量的值(来源:Variables in Scala)。
不可变变量
不可变变量一经创建其值便不可更改,使用“val”关键字声明。
不可变变量的语法如下:
不可变变量也可按如下方式定义:
不可变变量示例如下:
以上示例使用关键字
val来定义不可变变量,变量名为“numberOfThing”。随后是冒号与变量类型“Int”,存储在内存中的值为 2。上述不可变变量也可用不同语法书写如下:
如上所示,您可以不显式声明变量的数据类型,Scala 编译器会自动判断其为“Int”类型。该过程称为类型推断(来源:Variables in Scala)。
您不能像下面这样更改变量的值:
上述代码将导致错误,例如“error: not found: value numberOfThing”,表明不允许重新赋值,如下所示:
多重声明与赋值
在 Scala 中,可以使用“var”关键字进行多重声明,变量名用逗号分隔,并使用“=”为变量赋值。
在上述示例中,您可以看到变量 x、y、z 分别被赋值为 5、4.5 和 “Sit”。
同样地,也可以在一行中使用“val”关键字进行多重赋值,变量名用逗号分隔,并使用“=”为变量赋相同的值。
在上述示例中,变量 a、b、c 都被赋值为 1。
变量的作用域
作用域指变量在特定代码块内的可见性与生命周期。变量可以定义在局部作用域或全局作用域中。例如:
在上述代码中,变量“difference”处于局部作用域,它在方法“sub”内部声明,减法运算在该方法内有效,但在方法“sub”之外打印其值会导致错误。与此同时,全局作用域中的变量“globalVar”可以在程序的任意位置访问并进行操作。
Scala 中变量有三种作用域(来源:Scala- Variables):
局部变量
局部变量是在方法内部声明的可变或不可变变量,只能在该方法内访问,方法外不可见。
您可以参考下面的简单示例来了解局部变量:
上述代码的输出为:
The perimeter of the triangle is: 60
该程序包含一个名为“Perimeter”的类和一个名为“Test”的对象,其中有一个名为 triangle 的方法,包含三个可变变量 side1、side2、side3。计算与结果输出均在该方法内完成,从而得到正确结果。
字段
在类内定义的变量称为字段变量,既可以是可变的,也可以是不可变的。如果变量在类内声明但不在任何方法内,其访问修饰符默认是 public,可在程序的任意位置访问。然而,private 变量只能在其定义的类内访问,超出类的作用域(甚至在对象中)都无法访问。
上述代码的输出为:
Value of value2: 30
Value of value1:10
10
该程序包含一个名为“FieldExample”的类、一个名为“Demo”的对象,以及一个名为“operation”的方法。公共变量 value1 可通过点号访问,其打印结果为 10。私有变量 value2 的值为 30,尝试在类外访问并打印将导致错误。
方法参数
方法参数是在调用方法时接收值的变量,必须是使用“val”关键字定义的不可变变量。同时,当对其建立引用时,变量也可以在方法外被访问。
您可以参考下面的简单示例来了解方法参数:
上述代码的输出为:
Area of triangle is: 4.5
该程序包含一个名为“Triangle”的类,其中的方法“calculate”带有两个方法参数 height 与 width。在通过对象实例 a 调用“calculate”时传入整数 4 和 5。
结论
恭喜您,顺利完成本教程的学习!
本教程介绍了 Scala 的变量、定义变量的规则、不同类型的变量、多重声明与赋值,以及变量的作用域。
如果您希望进一步学习 Scala,请参加 DataCamp 的 Introduction to Scala 课程。