Включите исполнение JavaScript в браузере, чтобы запустить приложение.
11 фев 2025

Язык программирования Scala (Скала): для чего используется и что на нем пишут

В статье рассмотрим мультипарадигмальный язык общего назначения, который объединяет особенности объектно-ориентированного и функционального программирования.

История разработки Scala

В 1982 году в Кремниевой долине появилась компания Sun Microsystems — разработчик программного обеспечения и производитель компьютерного оборудования. Бизнес быстро набирал обороты и в 90-х стал лидером IT-рынка. Одним из продуктов Sun Microsystems стал язык программирования Java. Новый ЯП широко применялся и применяется до сих пор для написания клиентских приложений и серверного ПО.

В начале 2000-х компания Sun Microsystems столкнулась с проблемами. Спрос на оборудование упал, разработчик не успел переориентировать бизнес на монетизацию программных продуктов, что в итоге привело к миллионным убыткам и поглощению корпорацией Oracle.

На фоне финансовых сложностей в Sun Microsystems больше не занимались развитием «Джава». Однако язык оставался очень популярным в мировом IT-сообществе. Назревала потребность расширить возможности Java, сделать его более современным и гибким, сократить синтаксис и увеличить функциональность. В 2001–2004 годах этим вопросом занялся Мартин Одерски, профессор Федеральной политехнической школы Лозанны в Швейцарии. Результатом его работы стал Scala.

До 2010 года этот проект служил полем для творчества и экспериментов. Затем на «Скала» обратили внимание Twitter, LinkedIn и другие IT-гиганты, что привело к всплеску его популярности. Сейчас интерес утих, но эволюция языка продолжается, многие разработчики используют его для создания систем разной сложности.

Особенности Scala

В отличие от от Java и других ЯП, «Скала» лаконичен и сфокусирован на ООП с возможностью использования парадигм функционального программирования.

Объектно-ориентированный подход

Каждое значение и даже сама программа — это объект. Типы и поведение объектов описаны в классах и характеристиках. Классы можно параметризовать и расширять с помощью наследования, объединения и смешивания. Для обмена информацией о структуре и полях между классами используются трейты. Сущность Trait инкапсулирует методы или поля для последующей вставки в другие классы, что является альтернативным решением множественного наследования.

Функциональное программирование

Реализована поддержка функций высшего порядка, вложенных методов, каррирования для преобразования функции с несколькими аргументами в цепочку функций с одним аргументом. Каждая функция является значением. А так как в соответствии с парадигмой ООП каждое значение является объектом, то каждая функция тоже является объектом.

Совместимость с Java и кросс-платформенность

«Скала» можно использовать с библиотеками «Джава», совмещать стеки двух ЯП в одном проекте и работать на виртуальной машине Java Virtual Machine. Благодаря совместимости с JVM код будет выполнен на любом устройстве, так как за адаптацию к системной и аппаратной части отвечает виртуальная машина.

Статическая типизация

Каждое значение и выражение имеют определенный тип данных. Проверка типов происходит на этапе компиляции, поэтому большинство ошибок обнаруживаются до выполнения кода. Строгая статическая типизация дает математичность в программировании: можно точно определять поведение программы и ее свойства, строить абстракции, задавать четкие правила, типы данных и области значений для каждого типа.

Pattern Matching

Механизм сопоставления с образцом упрощает обработку различных типов данных и структур, что позволяет создавать более краткий и читаемый код. Можно сопоставлять элементы по типу, сравнивать объекты со сложными шаблонами и при совпадении раскладывать значение на составные части. Pattern Matching заменяет конструкции с if/else и оператор switch в «Джава».

Синтаксис Scala

Синтаксис сочетает элементы объектно-ориентированного и функционального программирования. Переменные объявляются с помощью val и var, присваивание и математические операторы также же, как в «Джава» или JS.

Писать команды и смотреть результат выполнения можно в браузере с помощью сервиса Scastie. Для начинающих программистов это самый простой способ протестировать язык.

Начнем с основ: выведем на консоль текстовое сообщение. Как выглядит синтаксис:

object Main extends App {

  println("Hello, GitVerse!")

}

Этот код определяет объект Main, который наследует трейт App, что позволяет запускать приложение без явного объявления метода main. Внутри объекта Main вызывается функция println, которая выводит текст «Hello, GitVerse!».

Другой пример: добавление числа к переменной.

Фрагмент кода:

val result = 15 + 2

println(result)

Код определяет переменную result, которая хранит результат сложения чисел 15 и 2. Результат операции выводится на консоль с помощью функции println.

Плюсы и минусы Scala

Преимущества определяются особенностями языка, которые мы рассмотрели выше. В их числе:

  • работоспособность кода на любом устройстве, без использования драйверов и необходимости проектирования механизмов совместимости;
  • полная интеграция с Java;
  • легкая масштабируемость в сторону увеличения или уменьшения системы за счет абстрактных конструкций;
  • инструменты для работы с параллелизмом и конкурентностью.

К недостаткам можно отнести:

  • сложность в освоении, даже для специалистов со знанием основ «Джава»;
  • медленная компиляция из-за более сложной, чем в других ЯП, системы типов и структуры;
  • невысокая популярность и, как следствие, нехватка опытных разработчиков.

Создавая продукт на «Скала», нужно готовиться к возможным проблемам «кадрового дефицита». Когда стартап вырастет и потребует больше людей для поддержки и развития, может быть сложно найти специалистов с подходящими навыками и адекватными зарплатными ожиданиями. Это касается программистов всех уровней: Junior, Middle и Senior.

Где и для чего используется Scala

Области применения не ограничены, инструментарий подходит для решения практически любых задач. Например, фреймворки Play и Lift открывают возможность применения ЯП в создании высоконагруженных веб-сервисов:

  • новостных порталов;
  • социальных сетей;
  • торговых систем и других FinTech-проектов;
  • образовательных онлайн-платформ.

Примеры других популярных направлений:

  • enterprise — создание корпоративных приложений, в том числе в сфере аналитики, банковских и финансовых услуг;
  • разработка кроссплатформенных сервисов для работы на разных устройствах и оборудовании любого типа;
  • реализация инструментов и фреймворков для DevOps;
  • написание библиотек для использования в проектах, связанных с анализом данных и машинным обучением;
  • проектирование серверного и десктопного ПО.

Также на «Скала» пишут отдельные компоненты больших многомодульных систем. В таких проектах часто задействованы распределенные команды, необходимо вести версионирование, управлять запросами на слияние, ответственностью за ревью и доступами к репозиториям. Все эти возможности предоставляет GitVerse — российская платформа для разработки и хранения исходного кода.