Меню Рубрики

Scala среда разработки для windows

Зачем нужен 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
// выводим переменную цикла на экран
println(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 – строгий статически типизированный JVM-based язык, успешно совмещающий парадигмы объектно-ориентированного и функционального программирования. В языке есть классы, функции высшего порядка, анонимные функции, обобщенное программирование. Использование Java-кода из Scala не вызывает трудностей, синтаксически языки очень близки. В этой статье мы разберем основные элементы языка, достаточные для того, чтобы начать на нем писать.

Настройка окружения

Scala — язык, работающий на JVM, поэтому для работы требует установленную JDK (минимальная версия 1.6). Ее можно взять отсюда. После установки JDK можно приступить к установке самой Scala. Скачать свежую версию можно на официальном сайте. Последняя версия на момент написания статьи — 2.11.6.

Для того, чтобы все корректно работало из командной строки, рекомендуется прописать переменные среды JAVA_HOME и SCALA_HOME , а также дополнить переменную PATH путями к выполняемым файлам. На Linux и MacOS это делается так:

Для того, чтобы сохранить эти настройки, их надо прописать в

На Windows команда немного другая:

Прописать эти опции постоянно можно в настройках системы: Control Panel → Advanced System Settings → Environmental Variables.

22–24 октября, Онлайн, Беcплатно

После выполнения всех манипуляций можно проверить результат, запустив:

Простые скрипты и маленькие программы можно, конечно, компилировать и запускать вручную с помощью команд scalac и scala . Однако, по мере того, как количество файлов будет расти, ручная компиляция будет становиться все более нудной. Вместо этого используют системы сборки. Для сборки кода на Scala можно использовать стандартные для Java (неофициально) maven, gradle или ant, но сообщество и сами разработчики рекомендуют sbt (simple build tool).

Примечание: если вы устанавливаете sbt, то можете пропустить отдельную установку scala, так как система сборки скачает ее автоматически

Описание процесса сборки находится либо в файле build.sbt в корне проекта, либо в файлах .scala в папке project там же. Само описание – это программа на Scala (которая, в свою очередь, может собираться с помощью sbt как отдельный проект, который… ну, вы поняли).

Синтаксис .sbt -файла напоминает синтаксис Scala с некоторыми дополнениями и ограничениями. Минимальный build.sbt выглядит примерно так (пустые строки обязательны):

Исходники помещаются в папку src/main/scala и src/test/scala по пути, соответствующем иерархии пакетов (как в Java). Чтобы собрать, протестировать и запустить проект, необходимо в любой поддиректории проекта выполнить следующие команды:

или через интерактивную консоль:

Последовательное выполнение команд выглядит немного необычно (обратите внимание на точку с запятой в начале — это особенность синтаксиса):

Отличным помощником в разработке будет REPL (Read-Eval-Print-Loop), или по-другому, интерактивная консоль. Очень удобно проверять в ней небольшие функции, отлаживать код или просто посмотреть возможности языка. Для запуска REPL наберите sbt console в командной строке. Вы увидите примерно следующее:

Все! Можно писать команды на Scala и сразу же их выполнять:

Для выхода из REPL можно нажать Ctrl+D. Все примеры на Scala далее можно протестировать в REPL, для вставки больших кусков кода можно воспользоваться командой :paste .

Использование IDE для разработки на Scala не обязательно, однако сильно упрощает процесс. Скала — язык со сложной семантикой, поэтому возможности IDE более ограничены, чем, скажем, при разработке на Java. Тем не менее даже простая подсветка несуществующих методов и автодополнение существующих может сильно облегчить жизнь. Самые популярные IDE для Scala — это IntelliJ IDEA и Eclipse. Для IDEA есть плагин от JetBrains, в случае с Eclipse есть ее вариант Scala IDE.

Переменные, значения и типы.

В Scala переменные и значения объявляются ключевым словом val или var . val — это неизменяемая переменная (значение), аналог final в Java. var — обычная переменная. Например:

Аналогичный код на Java будет выглядеть так:

Здесь мы видим сразу несколько приятных особенностей Scala:

  1. точка с запятой не обязательна (работает автоматический вывод);
  2. указания типа переменной необязательно (также работает автоматический вывод типов);
  3. ключевое слово public подразумевается по умолчанию.

Типы переменных указываются после имени, через двоеточие. Также в Scala нет, как таковых, примитивных типов ( int , float , boolean и т.д.). Их заменяют соответствующие классы Int , Float , Boolean и т.д. Любая переменная — экземпляр какого-либо класса. Иерархия классов начинается с Any , все классы наследуются от него (аналог Object в Java).

Применение привычных операторов, при этом, на самом деле — вызов метода: a + b тождественно a.+(b) . Вариант записи без точки применим к любым методам (с некоторыми ограничениями).

Функции, анонимные функции, методы

Функция в Scala объявляется с помощью ключевого слова def . Пример объявления и применения функции:

Аналогичный код на Java:

Как видно на примере, необязательны не только точка с запятой и указание типа, но и фигурные скобки вокруг единственного выражения и слово return . Более того, его использование считается плохой практикой. Из функции возвращается значение последней выполненной команды.

На самом деле, функция — это тоже объект. Каждая функция в Scala — это экземпляр класса Function , у которого есть метод apply . Поэтому мы вполне можем записать так (знак подчеркивания ставится на место аргумента функции):

Вызов метода apply подразумевается по умолчанию, поэтому использование функций внешне выглядит как в Java:

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

Конечно, присутствуют анонимные функции (лямбда-функции). Они объявляются так:

Здесь мы объявляем анонимную функцию, которая принимает один целочисленный аргумент и присвоил ее переменной f , после чего применяем f как обычную функцию.

Классы и объекты

Если вы программировали на Java, многие вещи, касающиеся объектно-ориентированного программирования будут вам знакомы. Класс объявляется ключевым словом class , новый экземпляр — через new . Методы класса — это функции, объявленные в его теле. Поля класса указываются сразу после имени, как список аргументов. При этом, по умолчанию они объявляются как private val . То есть, если мы не укажем никаких модификаторов, указанное поле будет доступно только внутри класса и будет неизменяемым. Класс можно сделать абстрактным, добавив abstract перед объявлением. Основное отличие от Java здесь заключается в отсутствии конструктора. Код, который должен выполняться при создании объекта, пишется прямо в теле класса. Как при этом реализовать несколько конструкторов с различным числом аргументов, мы рассмотрим позже. Пример использования класса:

И аналогичный код на Java:

Как видим, public указывать не обязательно, аргументы конструктора доступны во всем классе, локальное приватное поле создавать также не обязательно.

Кроме того, в Scala мы можем объявить сразу объект, без создания класса, с помощью ключевого слова object . Таким образом реализуется паттерн «Одиночка» (Singleton).

Аналог на Java будет куда более многословен.

В этом примере мы пометили конструктор как protected , чтобы исключить возможность его вызова извне, обращение к объекту будет осуществляться через метод getInstance() , который при первом своем вызове инициализирует экземпляр класс, а при последующих возвращает уже созданный экземпляр. Кроме того, вполне допустимо существование объекта и класса с одним и тем же именем, при этом они делят область видимости. Поэтому необходимость в директиве static отпадает — методы, объявленные не в классе, а в объекте ведут себя как статические. Такой объект называется в терминологии Scala «companion object» («объект-компаньон»).

Вернемся к конструкторам. Вспомним, что при применении любого объекта к некоторым аргументам по умолчанию вызывается метод apply . Этим мы и воспользуемся и напишем класс с несколькими конструкторами, статическими методами, изменяемыми и неизменяемыми полями в идиоматичном для Scala стиле и продублируем этот же код на Java.

Интерефейсы и трейты

Аналогом Java-интерфейса в Scala является трейт (trait). Как ни удивительно, объявляется он с помощью ключевого слова trait . Как и интерфейсы Java, трейты содержат только объявления методов и допускают множественное наследование. В отличие от интерфейса, в трейте можно описывать поля класса и частично реализовывать методы. Наследование как трейтов, так и абстрактных классов осуществляется с помощью extend (первый родитель) и with (последующие родители). Пример использования:

Ключевое слово override необязательно, но его использование является хорошей практикой.

Другие особенности и отличия от Java

Как и в Java, в Scala классы, трейты и функции можно параметризовать. Параметры типов пишутся в квадратных скобках после имени класса или функции. Так определяется интерфейс Foo , который принимает некоторый тип A и содержит метод bar ? который принимает значение типа A и некоторого типа B и возвращает объект типа C . Конкретные типы A , B и C будут определены в реализации интерфейса.

Конструкция if / else всегда возвращает значение выражения, которое стоит последним ввыполняемом блоке. Скобки вокруг условия обязательны, скобки вокруг тела, в котором только одна инструкция, можно опустить.

Блок try / catch / finally выглядит в Scala так:

Циклы while ничем не отличаются от варианта в Java:

А циклы for — наоборот, совсем не похожи (о них мы подробнее поговорим в следующей статье):

Также вы, возможно, могли заметить литерал . . Он имеет тип Nothing который является подкласс любого класса. При вызове . кидает исключение NotImplemented . Это примерно аналог undefined в Python. . можно ставить в качестве заглушки вместо тела функции, к написанию которого вы планируете вернуться позже.

Заключение

Итак, мы установили и настроили среду разработки для Scala, посмотрели основные элементы языка, сходства с Java и отличия от нее. Этого вполне должно хватить для того, чтобы начать писать простой и рабочий код. В следующей статье мы подробнее рассмотрим элементы функционального программирования, case-классы, pattern-matching и другие высокоуровневые особенности языка.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Scaciati windows 7 32 bit
  • Scaciati viber na windows phone
  • Scaciati scaip besplatno windows 7
  • Scaciati opera mini бесплатно windows 7
  • Sc1938 драйвер windows 7