Scala что за язык
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Scala (язык программирования)
Содержание
История
Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу при разработке языка были взяты 2 идеи:
Объектно-ориентированный язык
Функциональный язык
Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и карринговых функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно расширяется к обработке XML c помощью регулярных выражений.
Интеграция
Scala рассчитана на взаимодействие с такими ведущими платформами, как Java или C#. Она разделяет с этими языками большинство основных операторов, типов данных и управляющих структур.
Классы и объекты в Scala могут наследовать от Java-классов и реализовать Java-интерфейсы. Это позволяет использовать Scala-код во фреймворке Java. Например, Scala-класс мог бы реализовывать интерфейс java.util.EventListener. Экземпляры этого класса затем можно оповещать о событиях, поступающих от Java-кода.
Особенности языка
Пример № 1
В качестве первого пример мы возьмём стандартную программу Hello World.
Всё является объектами
В Scala всё является объектами, включая числа или функции. Этим Scala отличается от Java, поскольку в Java разделены примитивные типа (например boolean или int) и ссылочные типы, а также нет возможности работать с функциями как со значением. Числа – это объекты Поскольку числа являются объектами, они также имеют методы. На самом деле, следующее арифметическое выражение:
состоит исключительно из вызовов методов и эквиваленто следующему выражению:
Это также означает, что символы +, * – валидные идентификаторы в Scala. Скобки вокруг чисел необходимы, поскольку лексический анализатор Scala использует наиболее длинное правило сопоставления для токенов. То есть разобьёт следующие выражение
Классы
Этот класс может принимать два аргумента, которые являются действительной и мнимой частью комплексного числа. Эти аргументы должны быть переданы при создании объектов класса Complex: new Complex(1.5, 2.3). Этот класс содержит два метода re и im для получения этих двух частей. Следует отметить, что тип возвращаемого значения этих двух методов задан неявно. Он будет автоматически определён компилятором, который рассмотрит правую часть этих методов и решит что в обоих случаях тип возвращаемого значения будет Double.
Методы без аргументов
Небольшая проблема методов re и im заключается в том, что для того, чтобы вызвать их необходимо указывать пару пустых скобок после имени метода, как например в следующем примере:
Было бы лучше иметь возможность получить доступ к действительной и мнимой части, как если бы они были обычными полями и не указывать пару пустых скобок. Это вполне выполнимо в Scala, просто определяя метод без аргументов. Такие методы отличаются от методов с нулевым количество аргументов тем, что не нужно писать скобки после их имени, ни при определение, ни при использовании. Итак, наш класс Complex может быть переписан следующим образом:
Зачем нужен Scala?
Разбираем, почему это не самый популярный язык.
Встречали в вакансиях позицию разработчика на Scala? Это редкий зверь, но платят нормально. Разберёмся, что это такое и зачем нужно.
Разработчик языка рассчитывал, что Scala станет преемником Java: он наследует многое хорошее из Java, работает по схожим принципам и добавляет что-то своё. И хотя Scala не стал таким же распространённым, всё равно стоит понять, из чего он сделан.
Плюсы Scala
Scala, как и Java, работает под JVM — виртуальной машиной Java (Java Virtual Machine). JVM — это такая прослойка между программой и железом. Благодаря этой прослойке один и тот же код можно исполнить на чём угодно, для чего есть JVM: и на компьютере, и на терминале оплаты, и на умном холодильнике. Не нужно каждый раз думать: «А какие там драйверы экрана?» или «С какой скоростью работает сетевой шлюз?» — всё это берёт на себя JVM, а мы пишем только логику и интерфейс.
Минусы Scala
Но если всё было бы так просто, про Java все давно бы забыли, но этого не произошло. Более того, сейчас не так много Scala-вакансий на рынке, чтобы говорить о популярности этого языка. На это есть несколько причин:
Синтаксис
С точки зрения кода в Scala всё то же самое, что и в Java-языках, кроме некоторых ООП-особенностей, поэтому начнём с привычных деталей, а потом перейдём к отличиям.
Основы. Каждая команда заканчивается точкой с запятой, а присваивание и математические операторы такие же, как в Java и JavaScript.
Типов данных — много, как в любом типизированном языке. Как и в Ruby, каждый тип — это объект, который можно менять, добавлять в него новые методы.
Переменные. Объявляются с помощью служебных слов val и var, но разница между ними в Scala настолько размытая и непрозрачная, что иногда даже опытным разработчикам сложно понять, какое слово будет уместнее в каждой ситуации.
Условные операторы и циклы. Всё привычно — for, while и do-while, но с одним отличием: в цикле for применяется упрощённая запись для организации переменной цикла. Обратите внимание на код ниже — сколько танцев с бубном ради одного цикла, который сам занимает три строки (не считая комментария):
Кто и для чего использует Scala
У Scala нет явно выраженной области применения, как у некоторых других языков. С другой стороны, из-за объединения ООП и функционального программирования этот язык прижился в тех командах, которым нужно совмещать в работе оба подхода.
Второе преимущество — возможность запустить код в любом JVM-окружении, поэтому Scala выбирают те, кому нравится объектный подход, но не нравится то, как это сделано в Java.
Основные популярные фреймворки — Play и Lift, и их используют в основном СМИ и новостные сайты:
С чего начать
Если хотите изучить основы Scala и попробовать свои силы в объектно-ориентированном программировании в мире Java, то вот с чего можно начать.
Большая статья в RSDN Magazine — «Обзор языка программирования Scala». Хороший и понятный материал, но подан в сухом академическом стиле.
«Scala в примерах» в Викиучебнике — написано попроще, но без введения для новичков.
«Руководство по Scala» в Записках задумчивого программиста — просто, понятно, но иногда автор не даёт подробных объяснений тому, что происходит в коде.
Язык программирования Scala: скала, которую стоит покорить
Современные разработчики хотят от новых языков программирования краткости, понятности и типобезопасности. Именно таким был создан Scala. Впрочем, называть его новым не совсем верно – разработка Scala ведется уже 15 лет.
В июльском рейтинге RedMonk язык Scala занял 12 позицию. И это повод присмотреться к нему подробнее.
Общая информация
Scala – мультипарадигмальный язык программирования, который унаследовал изобразительные возможности от нескольких языков. Например, он напоминает и Java, и C#, но с гораздо большими возможностями.
Разработала Scala команда из Федеральной политехнической школы Лозанны под руководством Мартина Одерски. Он также занимался созданием Generic Java и компилятора Java фирмы Sun. В 2001 году Одерски решил создать типобезопасный язык для решения научных задач и улучшить языковую поддержку компонентного программного обеспечения.
Разработчики преследовали две основные цели:
Масштабируемость языка: с помощью одних и тех же концепций можно было бы описывать и мелкие, и крупные части.
Масшабируемая поддержка компонентов: унификация и обобщение функционального и объектно-ориентированного программирования.
Scala реализован для платформ Java и JavaScript. Разработчики верят, что он станет преемником Java, обеспечив возможность быстрого создания компонентного программного обеспечения благодаря типобезопасности, лаконичности и высокой мощности.
Компиляторы и библиотеки Scala распространяются под лицензией BSD (Berkeley Software Distribution license – программная лицензия университета Беркли).
Особенности
В Scala используется единообразная объектная модель: значение представляет собой объект, а операция – вызов метода. При этом функции являются полноправными значениями – так реализуется парадигма функционального программирования. И каждая конструкция языка возвращает значение.
Но, в отличие от Java, в Scala объявляется не класс объекта, а сразу экземпляр объекта. Это естественная реализация шаблона проектирования Singleton («одиночка») – класса с единственным экземпляром.
Язык поддерживает абстракции типов и значений. К примеру, здесь есть гибкие симметричные конструкции примесей для композиции классов и типажей. Кроме того, доступны представления для внешних расширений компонентов (views) и поддержка обобщенных функций (generics), в частности, дженериков высшего типажа (generics of a higher kind). Views – очень мощный инструмент, полезный для интеграции. Он позволяет расширять класс новыми членами и типажами. Лаконичность кода на Scala можно продемонстрировать так:
Применение
На Scala созданы два крупных веб-фреймворка: Play и Lift. Play задействует платформы Coursera и Gilt, а самым популярным проектом на Lift является Foursquare. Кроме того, LinkedIn использует микрофреймворк Scalatra для поддержки своего Signal API.
Рывок популярности Scala обусловило и объявление Twitter в 2009 году: сервис микроблогов перевел с Ruby на Scala значительную часть серверного кода и продолжил работу в этом направлении. В 2011 году онлайн-версия газеты The Guardian была переписана с Java на Scala. Разработку на этом языке ведут Novell, Siemens, GridGain. Средство автоматической сборки Sbt, которое является одной из ключевых составляющих инфраструктуры разработки языка, также написано на Scala.
Так как Scala поддерживает «свободное смешивание» с Java, на нем можно писать Android-приложения. А возможность компиляции в JavaScript позволяет разрабатывать веб-приложения.
Почему Scala – выбор молодых и современных
Scala – считают академичным языком, писать на котором смогут немногие. Бытует мнение, что на Scala пишут «умники», а те, кто любит попроще, выбирают Python, Haskell или Erlang. Scala – достаточно сложный язык, но эта сложность позволяет реализовать высокую производительность и нестандартные решения на стыке функционального и объектно-ориентированного программирования.
На Scala будет просто перейти Java-разработчикам. Это прекрасный выбор и в качестве второго языка. 12 место в рейтинге RedMonk – отличный показатель популярности Scala. По сравнению с предыдущим кварталом 2018 года этот язык программирования улучшил свои позиции, поднявшись с 14 места. В других рейтингах позиции Scala не столь высоки: например, в списке TIOBE в мае 2018 года этот язык программирования оказался только 20-м месте. Правда, критерием для присвоения индекса служит количество поисковых запросов, содержащих название языка.
Еще один интересный показатель – «индекс предпочтения» GitHub, относительное количество пользователей языка, которые для следующего проекта в своей области выберут его же. Разочаровавшихся в Scala меньше, чем в Java или С++:
Количество пользователей, которые выберут Scala для работы над следующим проектом
Но есть и минусы: из-за сложности Scala – не лучший выбор, чтобы создавать большие проекты и сразу отдавать код в продакшн. Кроме того, курсов по обучению этому языку программирования достаточно мало, так что это язык самообразования.
Язык программирования, применяемый LinkedIn, Twitter и Netflix: за что любят Scala
Пик популярности Scala пришелся на 2010-2014 годы, и пусть с тех пор язык опустился в рейтингах на несколько позиций, последние пару лет рост его востребованности стабилен. Scala постоянно развивается, совершенствуется, во многом благодаря тому, что его часто используют в разработке крупнейшие производители ПО и известнейшие продуктовые компании по всему миру.
Основные сферы применения Scala — Big Data, Data Analysis, проекты, реализующие высокую нагрузку на Backend.
В новом материале вместе с Глебом Стрельцовым, Software Engineer iTechArt, разбираем плюсы и минусы, преимущества и перспективы Scala, порог вхождения и впечатления от работы с ним.
Глеб Стрельцов
Software Engineer iTechArt
Ментор и куратор в Students Lab по направлениям Java и Scala. Участвует в разработке и проверке тестовых заданий.
Почему ты выбрал Scala?
— Scala предоставляет практически все передовые возможности, позволяющие классно организовывать код в объектно-ориентированном и функциональном стиле, задействовать целый ряд инструментов, встроенных либо в сам язык, либо доступных в библиотеках и фреймворках, являющихся неотъемлемой частью экосистемы Scala. Кроме того, достигнут впечатляющий баланс между академичностью и применением в production.
Глеб Стрельцовов, Software Engineer iTechArt
Мне, как разработчику пришедшему из JVM-технологий — в частности Java, — Scala показалась логичным продолжением своей карьеры без потери накопившегося бэкграунда.
Последнее, но не менее важное, — мне открылась дорога к интересным задачам и проектам, связанным с Big Data и высоконагруженным бэкендом. Благодаря переходу на Scala я больше работаю с приложениями, использующими функциональную парадигму (ФП) программирования*, передовыми технологиями и опытными профи, у которых многому можно научиться.
* Функциональная парадигма (ФП) так же, как и ООП, определяет базовые принципы, техники написания кода. При ее применении в программе используются концепции чистых функций и ссылочной прозрачности. Важно понять, что ООП и ФП не являются взаимоисключающими парадигмами. Нередко они используются одновременно при разработке одного приложения.
Тема сравнения ООП и ФП — сложная и глубокая, вызывает много споров и дискуссий в сообществе разработчиков. Некоторое представление о ней тебе может дать эта статья.
В чем преимущества языка на фоне других языков программирования?
— Это мультипарадигменный язык. То есть, для работы со Scala можно использовать как объектно-ориентированный подход (ООП), так и функциональный. На практике, обе эти концепции можно применять даже совместно, используя гибридную модель разработки, позволяющую брать все самое лучшее от обоих подходов. В итоге, мы получаем синергию ООП и ФП.
По сравнению с другими языками программирования, где только частично реализованы некоторые из элементов функционального программирования, не позволяющие в полной мере использовать эту концепцию в боевых условиях, в экосистеме Scala ФП реализована полным образом. Говоря по-простому, многие языки программирования не поддерживают функциональную концепцию на 100%. В отличие от Scala.
Глеб Стрельцовов, Software Engineer iTechArt
По этой же причине LinkedIn, Twitter, Netflix, Airbnb используют Scala в своих продуктах. Они также инвестируют немало ресурсов и времени в развитие языка, прокачивая его показатели эффективности в продакшене.
Во многом из-за этого у Scala очень богатый инструментарий для решения различных по сложности задач, немало вспомогательных библиотек, которые значительно упрощают и ускоряют разработку.
Чем Scala не похож ни на один из других языков программирования?
— На мой взгляд, визитные карточки Scala — сбалансированность, стабильная экосистема и богатая история использования в продакшене в популярнейших технологиях:
Когда речь идет о работе в распределенных средах (например, системы данных, состоящие из нескольких объектов: каталог с именами пациентов, каталог с датами записи, каталог с названием процедуры), где разработка ведется кластерами — или группами — машин, работающих с огромными выборками данных, на сцену выходит Scala со своим легким и высокофункциональным кодом, позволяющим быстро и удобно прописать функционирование всей системы.
Глеб Стрельцовов, Software Engineer iTechArt
Освоив Scala, можно легко создавать сложные программы, ограничиваясь малым количеством строчек с функциями. То, на что в других языках уйдут сотни и тысячи символов, в Scala можно представить несколькими строчками кода. Такая программа, кроме прочего, отличается высоким качеством, легкостью в сопровождении и лаконичностью.
Программисты-математики смогут получить дополнительное удовольствие от использования языка, поскольку, как я уже говорил, достигнут удачный баланс между математическими концепциями в программировании и их использованием для решения реальных задач. Scala является частью экосистемы JVM (Java Virtual Machine), и это огромное преимущество. Немало программ написано под JVM, и их, как готовые блоки, можно интегрировать в код на Scala, что значительно ускоряет разработку.
Высокий ли порог вхождения в Scala?
— Я бы сказал, если сравнивать с Java, C#, Python, Ruby, то порог вхождения чуть выше среднего показателя по ним. Это вовсе не из-за того, что язык сложный в изучении. Основная трудность — разобраться и понять функциональную парадигму программирования, которая, по сути, лежит в основе всех преимуществ этого языка.
Хорошая новость в том, что можно войти в Scala с пониманием ООП и в процессе работы постепенно освоить функциональную часть. Поэтому бояться Scala точно не стоит.
С чего начался твой путь в Scala? Было ли тебе сложно?
— Я начинал как Java разработчик. Но ни для кого не секрет, что в Java, как, впрочем, и в других языках программирования, нередко встречаются не самые интересные проекты. Так случилось и со мной. Проработав на нескольких legacy-проектах с большой текучкой разработчиков, старым кодом и шаблонными задачами, я понял, что хочу попробовать что-то новое. Тогда я и обратил внимание на Scala. Тут концентрация интересных проектов на порядок выше, намного больше нестандартных задач, необходимостей решения нетривиальных инженерных проблем.
Путь обучения был довольно стандартный: начал с разбора литературы, затем приступил к онлайн-курсам, написанию учебных проектов, а затем и реальных.
За что ты любишь Scala?
— Немало было сказано в предыдущих ответах на вопросы. Тут добавлю, что, помимо прочего, Scala позволяет мне более творчески подходить к решению технических проблем и вызовов, давая бизнесу качественный код, решающий задачи клиента.
Глеб Стрельцовов, Software Engineer iTechArt
Со Scala мне нравится чувствовать себя всегда увлеченным, общаться с очень интересными людьми. Бытует мнение, что Scala делает любого разработчика счастливым. Мне кажется, хорошая мотивация, чтобы приступить к изучению:)
Что бы ты посоветовал новичкам, которые только-только начинают разбираться в направлении?
— Советую начать:) А вообще, делюсь небольшой шпаргалкой. По пунктам:
Книги:
Другие ресурсы и онлайн-курсы:
Заинтересовали? Прямо сейчас набираем стажеров на бесплатную стажировку Scala в Students Lab! Присоединяйся к команде и освой направление за 3 месяца. Лучшим студентам — job offer.
The Scala Programming Language
Scala combines object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
Scala runs.
Scala in a Nutshell
click the boxes below to see Scala in action!
Seamless Java Interop
Scala runs on the JVM, so Java and Scala stacks can be freely mixed for totally seamless integration.
Type Inference
So the type system doesn’t feel so static. Don’t work for the type system. Let the type system work for you!
Concurrency & Distribution
Use data-parallel operations on collections, use actors for concurrency and distribution, or futures for asynchronous programming.
Combine Scala and Java seamlessly
Scala classes are ultimately JVM classes. You can create Java objects, call their methods and inherit from Java classes transparently from Scala. Similarly, Java code can reference Scala classes and objects.
Let the compiler figure out the types for you
The Scala compiler is smart about static types. Most of the time, you need not tell it the types of your variables. Instead, its powerful type inference will figure them out for you.
In this interactive REPL session (Read-Eval-Print-Loop), we define a class and two functions. You can observe that the compiler infers the result types of the functions automatically, as well as all the intermediate values.
Go Concurrent or Distributed with Futures & Promises
In Scala, futures and promises can be used to process data asynchronously, making it easier to parallelize or even distribute your application.
Traits
Combine the flexibility of Java-style interfaces with the power of classes. Think principled multiple-inheritance.
Pattern Matching
Think “switch” on steroids. Match against class hierarchies, sequences, and more.
Higher-order functions
Functions are first-class objects. Compose them with guaranteed type safety. Use them anywhere, pass them to anything.
Flexibly Combine Interface & Behavior
In Scala, multiple traits can be mixed into a class to combine their interface and their behavior.
Here, a StarCruiser is a Spacecraft with a CommandoBridge that knows how to engage the ship (provided a means to speed up) and a PulseEngine that specifies how to speed up.
Switch on the structure of your data
Go Functional with Higher-Order Functions
In Scala, functions are values, and can be defined as anonymous functions with a concise syntax.