一、Scala 的变量
Scala 变量的定义
Scala 中有两种变量形式,val 和 var。val 类似于 Java 中的 final 变量,一旦定义就无法再被更改或者赋值;var 类似 Java 中的非 final 变量,可以被多次赋值。
使用 IDEA 创建一个 Scala 项目 scala-tutorial;
在 src 目录下创建 main/scala 目录,并将 scala 目录设置为 Sources Root,在 scala 包下创建 package,并创建一个 Scala Object,代码如下:
object Hello {
def main(args: Array[String]): Unit = {
var msg = "Hello, Scala"
println(msg)
println(msg.getClass)
}
}
上述代码在 main 方法中通过 var 关键字定义了一个 msg 变量,并通过 println 方法输出到控制台,getClass 方法就是 Java 中的方法,用来获取变量的类型。
plus:这里的 main 方法与 Java 中的 main 方法没有什么不同,都是程序执行的入口,只不过形式有些不一样。
执行上述代码,输出结果如下:
Hello, Scala
class java.lang.String
msg 变量的类型为 java.lang.String,其实就是 Java 中的 String 类来实现的。
与 Java 代码相比声明一个 String 类型的变量时,需要显示的指定变量的类型;但是在 Scala 代码中没有指定变量的类型,这是因为 Scala 语言的类型推断能力。
当然也可以显示的指定变量的类型,与 Java 不同的是 Scala 的变量类型写在变量名之后,并使用冒号分割,在 main 方法中使用 val 定义一个不可变的变量 name,代码如下:
object Hello {
def main(args: Array[String]): Unit = {
val name: String = "Thunder"
println(name)
println(name.getClass)
}
}
执行上述代码,输出结果如下:
Thunder
class java.lang.String
val 定义的变量在初始化后不可以再被赋值,否则会报错 ”Reassignment to val“
现在再来看一看 main 函数,可以确定 main 函数中的参数也是一个 Array 类型且其中的元素为 String,变量名为 args,这与 Java 中的 main 函数是一样的,只不过形式不同。
二、Scala 的函数定义
通过上一节中的 main 函数我们可以确定 Scala 中函数的定义要通过 def 关键字;接下来我们在 Hello object 中定义一个函数,并在 main 函数中调用该方法;代码如下:
object Hello {
def main(args: Array[String]): Unit = {
var res = max(10, 20)
println("最大数为:" + res)
}
def max(x: Int, y: Int): Int = {
if (x > y) y
else y
}
}
执行 main 函数,输出结果如下:
最大数为:20
Scala 中函数的定义是从 def 关键字开始,然后是函数名,接着就是函数的参数列表,参数列表中的每个参数都要携带冒号表明参数的类型,因为 Scala 解释器无法推断函数参数的类型,在参数列表之后就是函数的返回值,也必须携带冒号表明返回值的类型,最后就是通过等号来连接函数体,函数体使用花括号包裹。
使用等号来连接函数体体现的是 Scala 的函数式编程风格,函数是对能产生值的表达式的定义。
有时候 Scala 函数的返回值类型是要被明确定义的,有时候也可以自动推断返回结果的类型。
如果函数体中的代码只有一行,那么可以将花括号省略,比如 max 函数可以简写为如下形式:
def max(x: Int, y: Int) = if (x > y) x else y
main 函数的返回值是 Unit 类型,在 Scala 中 Unit 类相当于 Java 中的 void,指的是函数没有有效的返回值。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情