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

Первая программа на 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 console → println("hi").
  2. Case class для "приветствия" вместо строки.
  3. JVM-веб: Play Framework (раздел Java/Scala).

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

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

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

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

В подборках​

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

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