本文概述
查看srcmini最近启动的Scala课程:Scala简介。
当在大数据领域一起处理与Apache Spark一起使用的大量数据时, Scala被数据科学家广泛使用。它既是面向对象的函数式编程语言, 又具有以下列出的许多其他基本功能:
- Scala是一种静态类型的语言, 该变量的数据类型是在使用之前定义的。类型检查在编译时而不是在运行时完成。
- 它也是一种”强类型”语言, 在其中进行操作之前会先检查变量。
- 它还支持类型推断, 其中编译器从表达式或文字中推断类型, 因此声明变量的类型是可选的。
在本教程中, 你将涵盖以下主题:
- 变量
- 在Scala中定义变量的规则
- 可变变量
- 不变变量
- 多个声明和赋值
- Scala中变量的范围
变量
变量是内存中的命名空间, 编译器根据相应变量的数据类型分配保留位置。在Scala中使用以下语法声明该变量, 如下所示:
val or val variable_name: variable_datatype = value;
在以上语法中, 可以使用’var’或’val’关键字以两种方式之一定义变量。它由’variable_name’作为新变量组成, 后跟冒号。变量的数据类型为” variable_datatype”。可以是任何有效的数据类型。在”值”之后, 符号将分配给”变量名”。
例如:
val varValue: Byte = 8;
” val”是用于定义变量的关键字, ” varValue”是变量名称。它的数据类型为”字节”, 包含值8。”字节”是一个8位带符号的值, 范围为2-7至27-1。
上面的’variable_datatype’可以是Scala中存在的任何数据类型, 如下所示。
- Int:是32位带符号的(正值或负值), 范围为2-31到231-1。
- 字节:这是一个8位带符号的值, 范围从2-7到27-1。
- 短:是16位有符号值, 范围为2-15到215-1。
- 浮点数:可以是32位或64位。
同样, 其他数据类型(例如Long, Char, Boolean, Char, String, Boolean, Null)也包含它们自己的范围, 有关详细信息, 请参见《 Scala入门指南》教程。另外, ” variable_datatype”应以大写字母开头, 即Int包含” I”, 表示上面的所有数据类型都是Scala中的对象。
在Scala中定义变量的规则
在Scala中定义变量的规则和约定如下:
- 变量名称以小写的驼峰开头。例如, 在变量名” nameOfGirl”中, 包含” n”作为小写字母。然后, 将单词” O”和” G”的所有开头字母大写。
- 变量名称不应包含在Scala中定义的保留字或关键字。
- 变量名称可以包含美元符号(‘$’)和下划线(‘_’)符号。但是, 不允许使用其他特殊字符, 例如’#’, ‘&’等。此外, 不鼓励使用下划线。
- 变量名称中不允许使用空格(制表符, 空格)。
- 变量名称必须以字母开头, 并且不能以数字或其他字符开头。
可变变量
可变变量甚至在声明变量之后也允许更改变量的值。
Mutable变量的语法如下所示:
var variable_name : variable_datatype = value;
Mutable变量的语法也可以定义如下:
var variable_name = value;
Mutable变量的示例如下所示:
var nameOfThing: String = "Car";
上面的示例包含var作为关键字, 用于定义可变变量。变量的名称为” nameOfThing”。冒号后面紧跟着变量的数据类型为’String’。存储在存储器中的值将为” Car”。
上面的具有不同语法的Mutable变量示例可以通过以下方式完成:
var nameOfThing = "Car";
你可以定义变量而无需变量的数据类型, 如上所述。 Scala编译器自动将其确定为”字符串”数据类型, 称为类型推断。
你可以按照以下步骤轻松更改变量的值:
nameOfThing = "Bike";
print(nameOfThing)
变量的值将从”汽车”更改为”自行车”。输出将是” Bike”, 因为关键字” var”使你可以更改变量的值(来源:Scala中的Variables)。
不变变量
不变变量是指一旦创建并使用’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”数据类型。该过程称为类型推断(来源:Scala中的变量)。
你不能按照以下步骤更改变量的值:
numberOfThing = 7;
上面的示例将导致类似”错误:未找到:值numberOfThing”的错误, 这表明无法重新分配值, 如下所示:
多个声明和赋值
在Scala中, 可以使用’var’关键字(变量名用逗号分隔)和带有变量值的” =”符号来进行多个声明。
var (x, y, z) = (5, 4.5, "Sit")
在上面的示例中, 你可以看到所有变量x, y和z分别分配给值5, 4.5和” Sit”, 如下所示。
在Scala中, 可以通过使用’val’关键字(其中变量名称以逗号分隔, 变量名称为” =”)来在一行中进行多个分配。
val a, b, c = 1;
在上面的示例中, 你可以看到将所有变量a, b和c分配给值1, 如下所示。
变量范围
范围是变量的可见性, 变量的生命周期在代码的指定块内。可以在本地或全局范围内定义变量。例如:
var globalVar = 10
def sub(){
var difference = 9-4;
}
print(difference)//Error
print(globalVar)//Valid
在上面的代码中, ” difference”变量在Local Scope中, 在” sub”方法内声明, 并且减法运算将得出有效的结果, 但在” sub”方法之外打印值将导致错误。还有一个全局作用域, 可以在程序中的任何位置访问变量” globalVar”, 并且可以对其执行任何操作。
Scala中变量的作用域有三种类型(来源:Scala-变量):
- 局部变量
- 领域
- 方法参数
局部变量
局部变量是在方法内部声明的可变变量或不可变变量, 只能在方法内部访问, 而不能在方法外部访问。
你可以查看下面的简单示例以了解局部变量:
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
上面的代码给出了结果:
三角形的周长是:60
上面的程序包含一个名为” Perimeter”的类和一个名为” Test”的对象, 其中有一个称为三角形的方法, 该方法具有三个可变变量, 如side1, side2, side3。结果的计算和打印将在方法内部完成, 这将提供正确的输出。
领域
在类内部定义的那些变量称为字段变量, 可以是任何类型的可变变量或不可变变量。如果在类内部声明了变量, 则访问修饰符将自动公开, 但不应在程序中任何位置均可访问该变量的任何方法内定义访问修饰符。但是, 可以在定义的类内部访问私有变量, 但不能在类范围之外甚至在对象中访问私有变量。
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
上面的代码给出了结果:
值2的值:30
价值值1: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
上面的代码给出了结果:
三角形的面积是:4.5
上面的程序包含一个名为” Triangle”的类。它包括一个名为”计算”的方法, 具有两个方法参数height和width。使用对象实例a调用”计算”时, 将传递整数值4和5。
总结
恭喜, 你已完成本教程的结尾!
在本教程中, 你介绍了Scala的变量, 定义变量的规则, 具有多个声明和赋值的变量的不同类型以及其中的变量范围。
如果你想了解有关Scala的更多信息, 请参加srcmini的Scala入门课程。