Scala 开发 | 02 - Scala 的变量与函数

178 阅读3分钟

一、Scala 的变量

Scala 变量的定义

Scala 中有两种变量形式,valvarval 类似于 Java 中的 final 变量,一旦定义就无法再被更改或者赋值;var 类似 Java 中的非 final 变量,可以被多次赋值。

使用 IDEA 创建一个 Scala 项目 scala-tutorial;

image.png

image.png

在 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 解释器无法推断函数参数的类型,在参数列表之后就是函数的返回值,也必须携带冒号表明返回值的类型,最后就是通过等号来连接函数体,函数体使用花括号包裹。

image.png

使用等号来连接函数体体现的是 Scala 的函数式编程风格,函数是对能产生值的表达式的定义。

有时候 Scala 函数的返回值类型是要被明确定义的,有时候也可以自动推断返回结果的类型。

如果函数体中的代码只有一行,那么可以将花括号省略,比如 max 函数可以简写为如下形式:

def max(x: Int, y: Int) = if (x > y) x else y

main 函数的返回值是 Unit 类型,在 Scala 中 Unit 类相当于 Java 中的 void,指的是函数没有有效的返回值。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情