掌握 Scala:从安装配置到第一个程序的全程指南 – wiki基地


掌握 Scala:从安装配置到第一个程序的全程指南

引言:为何选择 Scala?

在当今由数据驱动的世界里,编程语言的选择变得至关重要。Scala,一门集面向对象(Object-Oriented)与函数式编程(Functional Programming)之大成的多范式编程语言,正以其优雅的语法、强大的表达能力和卓越的性能,吸引着越来越多开发者的目光。

Scala 的名字是 “Scalable Language” (可伸缩的语言) 的缩写,这预示了它的设计初衷:伴随着用户的需求共同成长。它运行于 Java 虚拟机(JVM)之上,这意味着它可以无缝地与浩瀚的 Java 生态系统互操作,直接使用海量的 Java 库。更重要的是,大数据领域的王者级框架,如 Apache Spark、Apache Flink 和 Apache Kafka,其核心代码都是用 Scala 编写的。因此,掌握 Scala 不仅是学习一门新语言,更是获取一张进入大数据、高并发和分布式计算领域的关键门票。

本文将是一份详尽的路线图,旨在引导您——无论是编程新手,还是希望扩展技术栈的 Java 开发者——从零开始,一步步完成 Scala 的环境搭建,理解其核心工具,并成功编写、编译、运行您的第一个 Scala 程序。让我们一起踏上这段激动人心的 Scala 探索之旅。


第一部分:奠定基石 —— Scala 的安装与环境配置

在编写任何代码之前,我们需要先搭建好开发环境。这个过程虽然略显繁琐,但却是后续一切工作的基础。

1. 前置条件:Java 开发工具包(JDK)

由于 Scala 运行在 JVM 上,因此一个正常工作的 Java 开发工具包(JDK)是必不可少的。Scala 编译器(scalac)会将你的 Scala 代码(.scala 文件)编译成 Java 字节码(.class 文件),这些字节码最终由 JVM 解释执行。

检查 JDK 安装:

打开您的终端(在 Windows 上是命令提示符或 PowerShell,在 macOS/Linux 上是 Terminal),输入以下命令:

bash
java -version

如果您看到了类似下面的输出,说明 JDK 已经安装:

openjdk version "11.0.19" 2023-04-18
OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1)
OpenJDK HotSpot(TM) 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1, mixed mode, sharing)

如果提示“命令未找到”,则需要先安装 JDK。推荐安装 JDK 8、11 或 17 版本,这些是长期支持(LTS)版本,与 Scala 的兼容性最好。您可以从 Oracle 官网或 Adoptium (提供 OpenJDK) 下载。

配置 JAVA_HOME:

安装完 JDK 后,强烈建议配置 JAVA_HOME 环境变量,它指向您的 JDK 安装目录。许多构建工具(包括后面要讲的 SBT)都依赖这个变量来定位 JDK。

  • Windows: 在“系统属性” -> “高级” -> “环境变量”中,新建一个系统变量 JAVA_HOME,值为您的 JDK 安装路径(例如 C:\Program Files\Java\jdk-11.0.19)。然后,编辑 Path 变量,在值的末尾添加 %JAVA_HOME%\bin
  • macOS/Linux: 编辑您的 shell 配置文件(如 ~/.bash_profile, ~/.zshrc),添加如下行:

    bash
    export JAVA_HOME=/path/to/your/jdk
    export PATH=$JAVA_HOME/bin:$PATH

    然后执行 source ~/.bash_profile (或相应文件) 使其生效。

2. 安装 Scala

安装 Scala 主要有两种方式:手动安装和使用包管理器安装。

方法一:手动安装(官方二进制包)

这是最传统的方式,能让您清晰地了解 Scala 的文件结构。

  1. 下载: 访问 Scala 官方网站(https://www.scala-lang.org/download/)。选择一个最新的稳定版本(例如 2.13.x 系列)下载对应的二进制包(通常是 .zip.tgz 格式)。
  2. 解压: 将下载的压缩包解压到一个您喜欢的位置,路径中最好不要包含中文或空格。例如:
    • Windows: C:\scala
    • macOS/Linux: /usr/local/scala
  3. 配置环境变量: 这一步至关重要,它能让您在系统的任何路径下都能调用 Scala 命令。

    • 创建 SCALA_HOME 类似 JAVA_HOME,创建一个名为 SCALA_HOME 的环境变量,其值为您刚才的解压路径。
    • 添加到 Path 将 Scala 的 bin 目录添加到系统的 Path 变量中。
      • Windows: 编辑 Path 变量,添加 %SCALA_HOME%\bin
      • macOS/Linux: 在 shell 配置文件中添加 export PATH=$SCALA_HOME/bin:$PATH
  4. 验证安装: 重新打开一个终端窗口,输入以下命令进行验证:

    bash
    scala -version

    如果看到 Scala 的版本号,例如 Scala code runner version 2.13.12 -- Copyright 2002-2023, LAMP/EPFL,则表示 Scala 已成功安装!您也可以通过 scalac -version 验证 Scala 编译器。

方法二:使用包管理器(推荐)

对于现代开发者而言,使用包管理器是更高效、更便捷的方式,它能轻松地管理、切换不同版本的软件。

  • SDKMAN! (跨平台推荐):
    SDKMAN! 是一个专门为 JVM 生态系统设计的软件开发工具包管理器,支持在任何类 Unix 系统(包括 macOS、Linux、WSL)上运行。

    1. 安装 SDKMAN!:
      bash
      curl -s "https://get.sdkman.io" | bash
      source "$HOME/.sdkman/bin/sdkman-init.sh"
    2. 安装 Scala:
      “`bash
      # 查看可用的 Scala 版本
      sdk list scala

      安装指定版本的 Scala (例如,安装最新的稳定版)

      sdk install scala

      或者安装一个特定版本

      sdk install scala 2.13.12
      “`
      SDKMAN! 会自动处理下载、解压和环境变量配置,一切都变得异常简单。

  • Homebrew (macOS 用户):
    bash
    brew install scala

  • Linux 包管理器:
    “`bash
    # Debian/Ubuntu
    sudo apt-get install scala

    Red Hat/CentOS

    sudo yum install scala
    “`


第二部分:利其器 —— 掌握 Scala 交互式 Shell 与构建工具

环境配置完毕,我们来认识一下 Scala 开发中的两个核心工具。

1. Scala REPL:你的随身代码演练场

REPL 代表“Read-Eval-Print Loop”(读取-求值-打印-循环),它是一个交互式编程环境。你可以输入一小段 Scala 代码,它会立即执行并返回结果。这对于学习语法、测试 API、进行快速原型设计非常有用。

启动 REPL:

在终端中直接输入 scala 命令:

bash
scala

你会看到一个欢迎信息和 scala> 提示符,表示你已经进入了 REPL 环境。

体验 REPL:

让我们尝试一些简单的操作:

“`scala
scala> 1 + 1
res0: Int = 2

scala> val message = “Hello, Scala!”
message: String = Hello, Scala!

scala> println(message)
Hello, Scala!

scala> message.toUpperCase
res2: String = HELLO, SCALA!

scala> :help // 查看帮助命令

scala> :quit // 退出 REPL
“`

res0, res2 是 REPL 自动为未命名结果创建的变量名。val 关键字用于定义一个不可变的常量。你会发现,Scala 的语法非常简洁,并且具有强大的类型推断能力(你无需写 val message: String = ...,编译器能自动推断出 messageString 类型)。

2. 构建工具简介:为何需要 SBT?

对于单个文件或简单的脚本,直接使用 scalac 编译是可行的。但当项目变得复杂,涉及到多个源文件、外部依赖库(例如,一个 JSON 解析库)、自动化测试和打包部署时,手动管理将是一场噩梦。这时,构建工具就派上用场了。

SBT (Simple Build Tool) 是 Scala 社区事实上的标准构建工具。它负责:

  • 依赖管理: 自动下载项目所需的第三方库。
  • 编译: 编译你的 Scala (和 Java) 源码。
  • 测试: 运行单元测试和集成测试。
  • 打包: 将你的项目打包成可执行的 JAR 文件或其他格式。
  • 发布: 将你的库发布到中央仓库。

我们将在下一部分中,通过实践来感受 SBT 的威力。SBT 可以单独安装(同样,sdk install sbt 是个好方法),但许多 IDE(如 IntelliJ IDEA)会内置并自动管理 SBT。


第三部分:迈出第一步 —— 编写并运行你的第一个 Scala 程序

理论学习完毕,是时候动手编写代码了。我们将通过两种方式创建经典的 “Hello, World!” 程序。

方法一:简单脚本方式(手动编译运行)

这种方式能帮助你理解 Scala 程序从源码到执行的基本流程。

  1. 创建源文件:
    在你喜欢的位置,创建一个名为 HelloWorld.scala 的文件,并用文本编辑器打开它,输入以下内容:

    “`scala
    // HelloWorld.scala

    object HelloWorld {
    def main(args: Array[String]): Unit = {
    println(“Hello, Scala World!”)
    }
    }
    “`

    代码解读:
    * object HelloWorld: 在 Scala 中,object 关键字用来定义一个单例对象。它类似于 Java 中的一个只包含静态成员的类。程序的入口点必须位于一个 object 中。
    * def main(args: Array[String]): Unit: 这是程序的入口方法,与 Java 的 public static void main(String[] args) 类似。
    * def: 定义方法的关键字。
    * main: 方法名。
    * args: Array[String]: 方法参数。Scala 的语法是 参数名: 类型Array[String] 表示一个字符串数组。
    * : Unit: 方法的返回类型。Unit 类似于 Java 中的 void,表示这个方法不返回任何有意义的值。
    * println("Hello, Scala World!"): 调用标准库中的 println 函数,在控制台打印一行文字。

  2. 编译代码:
    打开终端,切换到 HelloWorld.scala 文件所在的目录,执行编译命令:

    bash
    scalac HelloWorld.scala

    执行成功后,你会在当前目录下看到生成了两个字节码文件:HelloWorld.classHelloWorld$.class。这就是 Scala 编译器的工作成果。

  3. 运行程序:
    使用 scala 命令来运行编译好的程序。注意,这里提供的是 object 的名字,而不是文件名。

    bash
    scala HelloWorld

    如果一切顺利,你将在终端看到输出:
    Hello, Scala World!
    恭喜!你已经成功完成了第一个 Scala 程序的编译和运行。

方法二:专业项目方式(使用 SBT)

这是在实际工作中创建和管理 Scala 项目的标准方式。

  1. 创建项目结构:
    一个标准的 SBT 项目有约定的目录结构。让我们手动创建它:

    hello-sbt/
    ├── build.sbt
    └── src/
    └── main/
    └── scala/
    └── HelloWorld.scala

    * hello-sbt: 项目的根目录。
    * build.sbt: SBT 的构建定义文件,是项目的核心配置文件。
    * src/main/scala: 存放主程序 Scala 源码的目录。

  2. 编写构建文件 build.sbt
    在项目根目录 hello-sbt 下,创建 build.sbt 文件,并添加以下最基本的内容:

    “`sbt
    // build.sbt

    name := “hello-sbt”

    version := “1.0”

    scalaVersion := “2.13.12” // 确保这个版本和你安装的 Scala 版本兼容
    “`
    这个文件告诉 SBT 项目的名称、版本以及使用的 Scala 版本。

  3. 编写源代码:
    src/main/scala/ 目录下,创建 HelloWorld.scala 文件,内容和之前完全一样:

    scala
    // src/main/scala/HelloWorld.scala
    object HelloWorld {
    def main(args: Array[String]): Unit = {
    println("Hello, SBT-managed Scala World!")
    }
    }

  4. 使用 SBT 运行项目:
    打开终端,切换到项目的根目录 hello-sbt。然后执行:

    bash
    sbt run

    第一次运行时,SBT 可能需要一些时间来下载自身、项目所需的 Scala 版本以及其他依赖。请耐心等待。下载完成后,SBT 会自动编译你的代码,找到 main 方法并执行它。你将看到如下输出:
    [info] welcome to sbt 1.9.7 (Azul Systems, Inc. Java 11.0.19)
    ...
    [info] running HelloWorld
    Hello, SBT-managed Scala World!
    [success] Total time: ...

通过对比,你会发现 SBT 极大地简化了构建过程。你只需要一条 sbt run 命令,它就处理了所有编译和运行的细节。在未来,添加第三方库也只是在 build.sbt 中增加一行配置而已。


第四部分:提升效率 —— 集成开发环境(IDE)的选择与配置

虽然终端和文本编辑器足以应付简单的任务,但对于大型项目,一个功能强大的 IDE 是不可或缺的。它能提供语法高亮、智能代码补全、实时错误检查、重构、调试等高级功能。

1. IntelliJ IDEA + Scala 插件 (强烈推荐)

IntelliJ IDEA 被公认为 Java 和 Scala 开发的“神器”。

  • 安装: 下载并安装 IntelliJ IDEA Community (免费版) 或 Ultimate (付费版)。
  • 安装 Scala 插件:
    1. 启动 IntelliJ IDEA。
    2. 进入 File -> Settings (或 Preferences on macOS) -> Plugins
    3. 在 Marketplace 中搜索 “Scala” 并安装。
    4. 安装完成后,重启 IDE。
  • 创建 SBT 项目:
    1. 选择 File -> New -> Project...
    2. 在左侧选择 “Scala”,右侧选择 “sbt”。
    3. 点击 “Next”,填写项目名称、位置,并选择 JDK 和 SBT 版本。
    4. IntelliJ IDEA 会自动为你创建好标准的 SBT 项目结构,并同步 build.sbt 的配置。你就可以直接在 src/main/scala 下编写代码了。
    5. 你可以直接在代码编辑区的 main 方法旁点击绿色的“运行”按钮来执行程序。

2. Visual Studio Code + Metals

如果你偏爱轻量级的编辑器,VS Code 配合 Metals 扩展也是一个非常出色的选择。

  • 安装: 安装 Visual Studio Code。
  • 安装 Metals 扩展:
    1. 打开 VS Code。
    2. 进入扩展视图 (Ctrl+Shift+X)。
    3. 搜索 “Scala (Metals)” 并安装。
  • 使用: 当你用 VS Code 打开一个包含 build.sbt 文件的目录时,Metals 会自动被激活。它会在右下角提示你“Import build”。点击确认后,Metals 会在后台进行项目索引,之后你就能享受到代码补全、跳转定义、查找引用等功能了。

结语:你的 Scala 之旅才刚刚开始

恭喜你!通过本指南,你已经成功地搭建了 Scala 开发环境,学会了使用 REPL 进行探索,掌握了手动和使用 SBT 两种方式来编译运行你的第一个 “Hello, World” 程序,并且了解了如何配置主流的 IDE 来提升开发效率。

这只是通往“掌握 Scala”之路的起点。前方还有更广阔、更精彩的世界等待你去探索:
* 基础语法: 变量 (valvar)、数据类型、控制流。
* 函数式核心: 高阶函数、不可变性、case class 与模式匹配。
* 强大的集合库: List, Map, Set 的丰富操作。
* 面向对象特性: class, trait (特质) 与继承。
* 并发编程: FutureAkka

保持好奇心,多动手实践,利用好 REPL 这个工具,不断挑战更复杂的项目。Scala 社区拥有丰富的学习资源和活跃的开发者社群。祝你在 Scala 的世界里,编写出优雅、健壮、可伸缩的程序,享受编程带来的乐趣!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部