Зачем нужен Scala?
Встречали в вакансиях позицию разработчика на Scala? Это редкий зверь, но платят нормально. Разберёмся, что это такое и зачем нужно.
Разработчик языка рассчитывал, что Scala станет преемником Java: он наследует многое хорошее из Java, работает по схожим принципам и добавляет что-то своё. И хотя Scala не стал таким же распространённым, всё равно стоит понять, из чего он сделан.
Плюсы Scala
Scala, как и Java, работает под JVM — виртуальной машиной Java (Java Virtual Machine). JVM — это такая прослойка между программой и железом. Благодаря этой прослойке один и тот же код можно исполнить на чём угодно, для чего есть JVM: и на компьютере, и на терминале оплаты, и на умном холодильнике. Не нужно каждый раз думать: «А какие там драйверы экрана?» или «С какой скоростью работает сетевой шлюз?» — всё это берёт на себя JVM, а мы пишем только логику и интерфейс.
Что это нам даёт.
- Scala совместим с Java-командами, поэтому если вы знаете Java, то сможете перейти и на Scala.
- Scala может работать с любым кодом на Java, независимо от его сложности.
- Чистейшая, незамутнённая объектно-ориентированность: даже сама программа — это один большой объект.
- Сильные механизмы абстракции позволяют одинаково просто программировать большие и маленькие системы и легко масштабировать их.
- Объединены объектно-ориентированный и функциональный подходы — в теории это должно способствовать распространению языка.
Минусы Scala
Но если всё было бы так просто, про Java все давно бы забыли, но этого не произошло. Более того, сейчас не так много Scala-вакансий на рынке, чтобы говорить о популярности этого языка. На это есть несколько причин:
- писать на Scala сложнее, чем на Java, потому что из-за влияния объектно-ориентированного подхода многое приходится делать через объекты, а это не всегда удобно;
- читать Scala-код сложнее, чем ту же самую программу на Java;
- медленная компиляция — критичное место для больших проектов, когда постоянно нужно тестировать новые версии;
- Scala-программирование требует совершенно другого подхода к архитектуре и логике построения кода, но не все хотят тратить на это время, если можно взять уже готовое Java-решение.
Синтаксис
С точки зрения кода в Scala всё то же самое, что и в Java-языках, кроме некоторых ООП-особенностей, поэтому начнём с привычных деталей, а потом перейдём к отличиям.
Основы. Каждая команда заканчивается точкой с запятой, а присваивание и математические операторы такие же, как в Java и JavaScript.
Типов данных — много, как в любом типизированном языке. Как и в Ruby, каждый тип — это объект, который можно менять, добавлять в него новые методы.
Переменные. Объявляются с помощью служебных слов val и var, но разница между ними в Scala настолько размытая и непрозрачная, что иногда даже опытным разработчикам сложно понять, какое слово будет уместнее в каждой ситуации.
Условные операторы и циклы. Всё привычно — for, while и do-while, но с одним отличием: в цикле for применяется упрощённая запись для организации переменной цикла. Обратите внимание на код ниже — сколько танцев с бубном ради одного цикла, который сам занимает три строки (не считая комментария):
// создаём объект, потому что это Scala object ForLoopDemo < // определяем функцию main def main(args: Array[String]) < // делаем цикл от нуля до 5 включительно, переменная цикла — counter for (counter >
Кто и для чего использует Scala
У Scala нет явно выраженной области применения, как у некоторых других языков. С другой стороны, из-за объединения ООП и функционального программирования этот язык прижился в тех командах, которым нужно совмещать в работе оба подхода.
Второе преимущество — возможность запустить код в любом JVM-окружении, поэтому Scala выбирают те, кому нравится объектный подход, но не нравится то, как это сделано в Java.
Основные популярные фреймворки — Play и Lift, и их используют в основном СМИ и новостные сайты:
- BBC,
- Coursera,
- Guardian,
- The Huffington Post,
- LinkedIn,
- The New York Times,
- Foursquare.
С чего начать
Если хотите изучить основы Scala и попробовать свои силы в объектно-ориентированном программировании в мире Java, то вот с чего можно начать.
Большая статья в RSDN Magazine — «Обзор языка программирования Scala». Хороший и понятный материал, но подан в сухом академическом стиле.
«Scala в примерах» в Викиучебнике — написано попроще, но без введения для новичков.
«Руководство по Scala» в Записках задумчивого программиста — просто, понятно, но иногда автор не даёт подробных объяснений тому, что происходит в коде.
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Scala
Scala — это язык программирования, основанный на Java. Его можно использовать для разных целей, он лаконичнее и упорядоченнее, чем Java, но местами сложнее в освоении. Язык опирается на объектно-ориентированный подход: все сущности в коде представлены в виде объектов.
Освойте профессию «Java-разработчик»
Scala создавался как преемник Java, но не получил такого же широкого распространения по нескольким причинам: необходимость иначе подходить к архитектуре, переучиваться с более привычной Java и многое менять. Тем не менее разработчики на Scala нужны — и получают довольно высокую зарплату.
Язык полностью совместим с Java, работает под той же виртуальной машиной, поэтому нередко его изучают Java-разработчики, которые хотят освоить больше связанных технологий. Еще есть реализация Scala на JavaScript, но она пока менее распространена.
Название читается как «скала» с ударением на первый слог.
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык
Для чего нужен язык Scala
Scala — язык общего назначения. Это значит, что у него нет жестко определенной области применения: его можно использовать практически для любых задач. Чаще всего Scala применяют в отдельных областях веба: высоконагруженные новостные сайты, социальные сети, образовательные сервисы и другие «тяжелые» проекты. Для веба у Scala есть отдельные фреймворки — Lift и Play.
Тем не менее Scala можно использовать и для других задач. В частности, тех, для которых по умолчанию выбирают Java, то есть таких, где важна полная кроссплатформенность. Тут языку сильно помогает наличие JVM, о которой мы поговорим позже. Технически его можно использовать и для «умной» техники, и для программ под любую операционную систему.
Особенности Scala
Scala довольно похож на Java, но если Java — многословный язык, то Scala более краток и лаконичен. Однако код на нем довольно непросто читается: нужно иметь привычку, чтобы понимать, что написано. У Scala есть несколько характерных особенностей.
Строгая типизация. Типизация в Scala — статическая и строгая. Это означает, что тип переменной жестко задается, присваивается раз и навсегда, а еще язык проверяет, чтобы, например, в функцию передавались только переменные определенного типа. В нем нельзя «вольно» обращаться с типами: например, передать число туда, где нужна строка. Есть автовыведение типов, то есть тип результата какого-то выражения компилятор языка подсчитает сам.
Объектно-ориентированный подход. Scala имеет сильный уклон в объектно-ориентированный подход, даже сама программа в нем считается объектом. Несмотря на то что язык создавался как мультипарадигменный, с ним преимущественно работают именно через ООП. Объектно-ориентированное программирование имеет свои плюсы и минусы: из плюсов — структурирование сущностей в коде, из минусов — громоздкость больших проектов.
Работа под JVM. Основная реализация Scala написана под JVM, поэтому язык полностью кроссплатформенный. JVM — это Java Virtual Machine, особая технология виртуализации, созданная изначально для языка Java. JVM позволяет запустить код на любом устройстве: виртуальная машина сама отвечает за все «технические» детали, связанные с системными и «железными» особенностями. Программисту остается писать код и не думать о совместимости. Код запустится внутри виртуальной системы, а она работает на чем угодно, вплоть до кофеварок (кстати, по одной из версий, именно из-за этого появилось название языка Java).
Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Преимущества Scala
ООП. Объектно-ориентированный подход позволяет организовать код, сделать сущности в нем более четкими и структурированными. Это важно, чтобы не запутаться. А возможности Scala позволяют реализовать ООП очень широко и точно.
Лаконичность. Более краткий синтаксис — это удобно. Так код занимает меньше места, его быстрее писать и читать.
Кроссплатформенность. Код на Scala можно запустить где угодно, это очевидный плюс. Не нужно беспокоиться о совместимости и о «железе».
Полная совместимость с Java. Scala полностью «понимает» Java-код, может работать совместно с ним и поддерживает все его функции. Программы на этих двух языках могут спокойно общаться между собой без ошибок, даже если код сложный.
Масштабируемость. Scala устроен так, что проект на нем можно легко масштабировать в большую или меньшую сторону. Это удобно, если вы проектируете систему, которая в будущем может серьезно расшириться.
Недостатки Scala
Сложность. Scala сложнее, чем Java: чтобы его выучить, желательно уже знать Java, а синтаксис и особенности построения программ в нем совершенно другие и довольно непростые. Поэтому не каждый программист в принципе пойдет на то, чтобы его изучать, когда в мире уже есть Java.
Медленная компиляция. Работать программа может быстро, а вот компилироваться, то есть «собираться» из исходного кода в исполняемый, — медленно. Если проект большой и в нем много частей, это критично.
Низкая распространенность. Scala менее популярен, чем Java, из-за высокой сложности и необходимости совершенно иначе подходить к построению программ. В частности, в России сейчас вакансий относительно немного. Компаниям проще воспользоваться более привычной Java, чем с нуля строить совершенно иную архитектуру или вообще переводить на нее уже существующий большой проект. Но Scala постепенно набирает популярность: например, на него перешла социальная сеть Twitter, на нем работает Coursera. Так что, возможно, все еще впереди.
Как стать Scala-программистом
Для начинающих Scala может показаться довольно сложным языком, так что рекомендуется на момент его изучения уже быть знакомым с Java и азами компьютерных наук. Так будет легче разобраться в особенностях языка, в его подходе к синтаксису и архитектуре.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.
Статьи по теме:
Введение
Здесь вы увидите вводное описание наиболее часто используемых возможностей Scala. Этот обзор предназначен для новичков в изучении языка.
Это лишь небольшая экскурсия, а не полный курс освоения языка. Для глубокого погружения рекомендуем почитать книги или воспользоваться курсами на других ресурсах.
Что такое Scala?
Scala – это современный мультипарадигмальный язык программирования, разработанный для выражения общих концепций программирования в простой, удобной и типобезопасной манере. Элегантно объединяя особенности объектно-ориентированных и функциональных языков.
Scala объектно ориентированный
Scala – это чистый объектно-ориентированный язык в том смысле, что каждое значение – это объект. Типы и поведение объектов описаны в классах и трейтах(характеристиках объектов). Классы расширяются за счет механизма наследования и гибкого смешивания классов, который используется для замены множественного наследования.
Scala функциональный
Scala также является функциональным языком в том смысле, что каждая функция – это значение. Scala предоставляет легкий синтаксис для определения анонимных функций, поддерживает функции высшего порядка, поддерживает вложенные функции, а также каррирование. Scala имеют встроенную поддержку алгебраических типов данных, которые используются в большинстве функциональных языках программирования (эта поддержка базируется на механизме сопоставления с примером, где в качестве примера выступают классы образцы ). Объекты предоставляют удобный способ группировки функций, не входящих в класс.
Вдобавок к этому, концепция сопоставления с примером логично переносится на обработку XML-данных используя в качестве примера регулярные выражения, при поддержке функционала объектов экстракторов. Для еще большего удобства обработки данных представлена схема формирования запросов с использованием for-выражения. Такие возможности делают Scala идеальным решением для разработки приложений по типу веб-сервисов.
Scala статически типизированный
Scala оснащен выразительной системой типов, которая обеспечивает безопасное и гармоничное использование абстракций. В частности, система типов поддерживает:
- обобщенные классы
- вариантность типов
- верхние и нижние границы типов
- внутренние классы и члены абстрактного типа, как часть объектов
- составные типы
- самоописываемые типы
- неявные параметры и неявные преобразования
- полиморфные методы
Выведение типов означает, что разработчику не обязательно добавлять в код избыточную информацию о типах. Такой функционал обеспечивает основу для безопасного переиспользования абстракций и типобезопасного развития программного обеспечения.
Scala расширяемый
Зачастую разработка приложений для очень специфичных областей требует специфичных для этих областей языковых возможностей, либо отдельных специализированных языков программирования. Вместо этого Scala предлагает уникальные механизмы, для легкой модификации и расширения самого языка.
Во многих случаях такое можно сделать без использования средств мета-программирования, таких как макросы. Например:
- Неявные классы позволяют добавлять новые методы к уже существующим.
- Интерполяция строк позволяет добавлять обработку строк (расширяется разработчиком с помощью интерполяторов).
Scala совместимый
Scala полностью совместим с популярной средой Java Runtime Environment (JRE). Взаимодействие с основным объектно-ориентированным языком программирования Java происходит максимально гладко. Новые функции Java, такие как SAM, лямбды, аннотации и дженерики, имеют прямые аналоги в Scala.
Те функции Scala, которые не имеют аналогов в Java, такие как параметры по умолчанию и именованные параметры, компилируются как можно ближе к Java. Scala имеет такую же компиляционную модель (отдельная компиляция, динамическая загрузка классов), как у Java, что позволяет получить доступ к тысячам уже существующих высококачественных библиотек.
Наслаждайтесь туром!
Для продолжения знакомства предлагаю перейти на следующую страницу нашего тура.
При подготовке материала использовались источники:
https://thecode.media/scala/
https://docs.scala-lang.org/ru/tour/tour-of-scala.html