Перейти к основному содержимому

Первая программа на Scala

Разработчику Архитектору Инженеру

Play ITЗагрузка интерактивного демо…


Первая программа на Scala

Эта статья ведет от "пустого компьютера" до запуска рабочего Scala-проекта. Сначала вы ставите инструменты, потом создаете минимальный build.sbt, запускаете программу и проверяете среду через REPL.

Если хотите понять теорию до практики, сначала пройдите основы языка Scala, а затем вернитесь к шагам установки.


Где применяют Scala

Scala сочетает ООП и функциональное программирование на JVM — тот же runtime, что у Java. Сборка через sbt, код в src/main/scala, REPL для экспериментов.

Первая программа — println и объект App; дальше — Akka, Spark, Play Framework.


Маршрут чтения после этой статьи

После первого запуска удобно идти в таком порядке:

  1. Основы языка Scala — синтаксис, типы, коллекции.
  2. Типы и паттерн-матчинг — ADT, Option, Either, match.
  3. Функции и функциональные конструкции — композиция, flatMap, эффекты.
  4. Простые приложения на Scala — практические мини-проекты.

Практическое задание

Установите JDK и sbt, создайте проект по шагам ниже, затем:

sbt run
sbt console

В REPL: println("Hello from REPL")


Подготовка окружения

Для работы с Scala требуется установка нескольких компонентов. Основной из них — Java Разработка Kit (JDK), поскольку Scala компилируется в байт-код JVM. Без JDK невозможно выполнить ни одну программу на Scala.


Установка JDK

  1. Откройте официальный сайт Adoptium или Oracle JDK.
  2. Выберите версию JDK 17 или новее. Scala хорошо совместима с современными LTS-версиями Java.
  3. Скачайте установочный файл, соответствующий вашей операционной системе: Windows, macOS или Linux.
  4. Запустите установку и следуйте инструкциям мастера.
  5. Проверка JDK:
java -version

Если команда возвращает информацию о версии Java, например:

openjdk version "17.0.12" 2024-07-16
OpenJDK Runtime Environment Temurin-17.0.12+7 (build 17.0.12+7)
OpenJDK 64-Bit Server VM Temurin-17.0.12+7 (build 17.0.12+7, mixed mode)

это означает, что JDK установлен корректно.


Установка Scala

Существует несколько способов установить Scala. Наиболее универсальный и рекомендуемый — через сборщик проектов, такой как sbt (Simple Build Tool). Он автоматически управляет зависимостями, версиями Scala и процессом компиляции.


Установка sbt
  • Windows:
    Перейдите на страницу https://www.scala-sbt.org/download.html, скачайте MSI-установщик и запустите его. Установщик добавит sbt в системный PATH.

  • macOS (Homebrew):

brew install sbt
  • Linux (Debian/Ubuntu):
echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo apt-key add
sudo apt update
sudo apt install sbt

После установки проверьте версию sbt:

sbt --version

Если команда возвращает номер версии, например 1.9.7, значит, sbt установлен успешно.


Выбор интегрированной среды разработки (IDE)

Для написания программ на Scala подходит несколько современных IDE. Наиболее популярные — IntelliJ IDEA и Visual Studio Code с расширением Metals.


IntelliJ IDEA

IntelliJ IDEA от JetBrains предлагает отличную поддержку Scala через плагин Scala Plugin.

  1. Скачайте IntelliJ IDEA Community Edition с официального сайта.
  2. Установите программу, следуя стандартным шагам.
  3. При первом запуске перейдите в File → Settings → Plugins (на macOS: IntelliJ IDEA → Preferences → Plugins).
  4. Найдите плагин Scala и установите его.
  5. Перезапустите IDE.

Теперь IntelliJ IDEA готова к работе с проектами на Scala.


Visual Studio Code + Metals

Если вы предпочитаете легковесную среду, используйте VS Code с сервером языка Metals.

  1. Установите Visual Studio Code.
  2. Откройте расширения (Ctrl+Shift+X или Cmd+Shift+X).
  3. Найдите и установите расширение Scala (Metals).
  4. После установки Metals автоматически загрузит необходимые компоненты при открытии первого Scala-проекта.

Обе среды поддерживают автодополнение, навигацию по коду, рефакторинг и отладку.


Создание первого проекта

Проект на Scala лучше всего начинать с использования sbt, так как он обеспечивает стандартную структуру каталогов и управление зависимостями.


Шаг 1 — Создание директории проекта

В терминале:

mkdir hello-scala
cd hello-scala

Шаг 2 — Настройка структуры проекта

Создайте следующие подкаталоги:

mkdir -p src/main/scala

Эта структура соответствует соглашению sbt: исходный код размещается в src/main/scala.


Шаг 3 — Создание файла сборки

В корне проекта создайте файл build.sbt:

touch build.sbt

Откройте его в любом текстовом редакторе и добавьте следующее содержимое:

name := "HelloScala"
version := "0.1"
scalaVersion := "3.5.0"

Здесь:

  • name — имя проекта,
  • version — версия,
  • scalaVersion — версия языка Scala. Рекомендуется использовать последнюю стабильную версию Scala 3 (Dotty).

Шаг 4 — Написание первой программы

Создайте файл Main.scala внутри src/main/scala:

touch src/main/scala/Main.scala

Откройте его и введите следующий код:

@main def hello(): Unit =
println("Hello, World!")

Этот код определяет точку входа программы. В Scala 3 ключевое слово @main автоматически создаёт метод main, который вызывается при запуске. Функция hello не принимает аргументов и возвращает тип Unit, что эквивалентно void в других языках. Вызов println выводит строку в консоль.

Альтернативный синтаксис (совместимый с Scala 2 и 3):

object Main:
def main(args: Array[String]): Unit =
println("Hello, World!")

Третий вариант — extends App (удобен в учебных примерах и Scala 2; в продакшене чаще явный main или @main):

object Main extends App {
println("Hello, World!")
}

Все три варианта рабочие: @main — краткий стиль Scala 3; def main — классический JVM-вход; extends App — без явной сигнатуры main (удобно в учебных примерах).


Запуск программы

Из корня проекта (hello-scala):

sbt run

sbt автоматически:

  • загрузит компилятор Scala нужной версии,
  • скомпилирует исходный код,
  • найдёт точку входа (@main или object Main с методом main),
  • запустит программу.

В терминале появится:

Hello, World!

Если в проекте несколько точек входа, sbt предложит выбрать одну из них по номеру.


REPL в контексте проекта

Из корня проекта:

sbt console

В REPL доступны зависимости и скомпилированные классы. Пример:

scala> println("Hello from REPL")
Hello from REPL

Частые проблемы

СимптомЧто проверить
java: command not foundУстановлен JDK, JAVA_HOME указывает на него
Долгий первый sbt runНормально: скачиваются Scala и зависимости
Metals/IDE не видит проектОткрыть корень с build.sbt, дождаться импорта sbt

Дополнительные возможности

После успешного запуска можно экспериментировать с кодом. Например, измените сообщение:

@main def hello(): Unit =
println("Привет, Вселенная IT!")

Сохраните файл и снова запустите sbt run (см. блок выше). Изменения применятся автоматически.

Для более сложных проектов sbt поддерживает:

  • управление внешними библиотеками через libraryDependencies,
  • многомодульную структуру,
  • тестирование с помощью фреймворков, таких как ScalaTest или MUnit.

Минимальный тест (добавьте в build.sbt строку libraryDependencies += "org.scalameta" %% "munit" % "1.0.0" и файл src/test/scala/HelloSuite.scala):


import munit.FunSuite

class HelloSuite extends FunSuite:
test("greeting is non-empty"):
val msg = "Hello, World!"
assert(msg.nonEmpty)

Запуск тестов:

sbt test

Частые ошибки

СимптомПричина
sbt не найденНе установлен или не в PATH
Ошибки отступовВ Scala 3 значимы пробелы в if/def
Медленный первый запускsbt качает зависимости — дождитесь success

Что попробовать

  1. REPL: sbt consoleprintln("hi").
  2. Case class для "приветствия" вместо строки.
  3. JVM-веб: Play Framework (раздел Java/Scala).

Частые ошибки

СимптомПричина
sbt не найденНе установлен или не в PATH
Ошибки отступовВ Scala 3 значимы пробелы в if/def
Медленный первый запускsbt качает зависимости — дождитесь success

Что попробовать

  1. REPL: sbt consoleprintln("hi").
  2. Case class для "приветствия" вместо строки.
  3. JVM-веб: Play Framework (раздел Java/Scala).

В подборках

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Первые шаги (маршрут подборки) — Первая программа на Haskell, Первая программа на Elixir, Первая программа на Groovy, Первая программа на Zig, Первая программа на Smalltalk, Первая программа на Nim.