Статьи

От нуля до Hello World в Scala

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

Я недавно закончил курс Scala Мартина Одерского, и мне было очень трудно понять, с чего начать. Вы знаете, это первый шаг, когда вы хотите начать кодирование, но вы не знаете, какие инструменты в вашем распоряжении, какую IDE использовать или какую платформу модульного тестирования выбрать. Этот урок будет о вас, новичке в Scala, о том, как подготовить среду разработки, чтобы вам было легче начать работу.


Вот части головоломки, о которых мы поговорим в этом уроке, не стесняйтесь пропустить те, которые вы уже знаете:

  • Simple Build Tools (SBT) — это инструмент, который генерирует проекты, зависимости и т. Д. Для Scala
  • NetBeans с плагинами Scala — как интегрировать Scala с NetBeans
  • Hello World — мы создадим наш первый исходный файл Scala
  • Scalatest — рекомендуемая среда модульного тестирования для Scala

Мы возьмем каждую тему в списке и обсудим ее на начальном уровне и, наконец, посмотрим, как все эти части работают вместе.


Прежде чем начать, убедитесь, что на вашем компьютере установлена ​​последняя версия Java SDK. Поскольку Scala работает на виртуальной машине Java (JVM), требуется SDK. Остальные темы в нашем списке могут потребовать Java SDK, прямо или косвенно, так что это хорошо.

Вам не нужно устанавливать Scala. Мы поговорим об этом в следующей главе.


Если вы разработчик PHP, то вы, вероятно, знакомы с Composer. Если вы гуру Ruby, вы знаете и любите Bundler. Если вы программируете на каком-то другом языке, я уверен, что для этого есть менеджер пакетов.

SBT аналогичен вышеперечисленным менеджерам пакетов, но, хотя Composer требует от вас предустановленной PHP точно так же, как Bundler нужен Ruby, Scala не требуется устанавливать в систему, прежде чем вы сможете использовать SBT. Фактически, конкретная версия Scala, которую вы хотите использовать для своего проекта, может быть просто указана как зависимость в SBT. Вы можете задаться вопросом, как это возможно. Как я упоминал ранее, Scala работает на JVM; по сути, это просто библиотека Java. Пакеты для Scala также могут быть простыми файлами .jar. Итак, SBT сам по себе является просто Java-программой. Вам нужна только Java, которая у вас, вероятно, уже есть.

Существует много разных способов установки SBT. По кросс-платформенным причинам между Linux, Mac и Windows, мой предпочтительный способ установки SBT — просто взять архив, поместить его в каталог, извлечь его в мой домашний каталог и добавить его путь в систему.

Загрузите последнюю стабильную версию SBT из официального репозитория . Ищите папку без «Бета» или «R» или «М» в конце. Это будет стабильная версия. На момент написания данного руководства последняя стабильная версия — 0.12.3 .

Архив содержит каталог sbt внутри него. Просто извлеките это в ваше любимое место. Я предпочитаю, чтобы это было где-то в моем домашнем каталоге, например /home/csaba/Programming/Scala/sbt

Затем добавьте путь к вашему каталогу bin SBT, к вашей переменной PATH. В UNIX-подобных системах, если вы используете Bash, добавьте такую ​​строку в файл ~/.bash_profile или ~/.bashrc :

1
2
PATH=$PATH:$HOME/Programming/Scala/sbt/bin
export PATH

Переменная $HOME обычно указывает на ваш домашний каталог. Вы можете использовать его в своих файлах конфигурации. Пользователи Windows могут иметь другую переменную для этого. Не забудьте команду export во второй строке, иначе ваша PATH будет доступна только внутри файла конфигурации.

Теперь проверьте, что ваша установка SBT прошла успешно. Откройте консоль или инструмент командной строки и введите:

1
2
$ sbt —version
sbt launcher version 0.12.2

Знак $ — это приглашение Bash, остальное — команда, которую вы введете. Как видите, у меня установлена ​​версия 0.12.2.

Другие способы установки SBT вы можете проверить в официальной документации по настройке .

Создайте папку, в которой вы хотите разместить свой будущий код, откройте консоль, перейдите во вновь созданный каталог и просто запустите команду sbt .

01
02
03
04
05
06
07
08
09
10
11
12
13
csaba@csaba ~/Personal/Programming/NetTuts/From Zero to Hello World in Scala/Sources $ sbt
[info] Loading global plugins from /home/csaba/.sbt/plugins
[info] Updating {file:/home/csaba/.sbt/plugins/}default-e430ed…
[info] Resolving org.scala-sbt#precompiled-2_10_0;0.12.2 …
[info] downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/actions/0.12.2/jars/actions.jar …
[info] [SUCCESSFUL ] org.scala-sbt#actions;0.12.2!actions.jar (3648ms)
 
[…] Many more download here
 
[info] [SUCCESSFUL ] org.scala-tools.testing#test-interface;0.5!test-interface.jar (239ms)
[info] Done updating.
[info] Set current project to default-f502c6 (in build file:/home/csaba/Personal/Programming/NetTuts/From%20Zero%20to%20Hello%20World%20in%20Scala/Sources/)
>

Обратите внимание, что текущий проект был настроен на папку, в которой вы находитесь, и что ваша консоль изменилась. Теперь вы находитесь в консоли SBT. Вы можете покинуть эту консоль, нажав клавиши CTRL + d или CTRL + c или введя команду exit .

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

Использование общесистемных или общедоступных настроек для всех ваших проектов может оказаться не лучшим вариантом. Каждый проект индивидуален, ему нужны разные зависимости, имя и т. Д. Чтобы сообщить SBT о такой информации, мы должны создать файл с именем build.sbt . Он должен быть помещен в корневую папку проекта, которую вы можете найти в последней строке предыдущего примера.

Язык, используемый в этих файлах, представляет собой DSL, напоминающий синтаксис Scala, но гораздо менее сложный. Для простоты вы обычно просто определяете некоторые значения, такие как имя и версия вашего проекта или зависимости, например, какие версии Scala или SBT использовать. Названия этих значений называются «ключами». Мы будем работать только с несколькими из них. Посетите страницу Keys.scala для получения полного списка ключей .

Для нашего проекта мы укажем только четыре ключа. Их имена делают их довольно очевидными:

1
2
3
4
5
6
7
name := «Hellow World»
 
version := «1.0»
 
scalaVersion := «2.10.1»
 
sbtVersion := «0.12.3»

Будьте очень осторожны с пустыми строками в файле конфигурации. Каждое определение значения ключа должно быть отделено пустой строкой. Теперь запустите sbt update в каталоге вашего проекта.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
$ sbt update
[info] Loading global plugins from /home/csaba/.sbt/plugins
[info] Set current project to Hellow World (in build file:/home/csaba/Personal/Programming/NetTuts/From%20Zero%20to%20Hello%20World%20in%20Scala/Sources/)
[info] Updating {file:/home/csaba/Personal/Programming/NetTuts/From%20Zero%20to%20Hello%20World%20in%20Scala/Sources/}default-f502c6…
[info] Resolving org.scala-lang#scala-library;2.10.1 …
[info] Done updating.
[success] Total time: 1 s, completed May 13, 2013 8:17:54 PM
 
$ sbt
[info] Loading global plugins from /home/csaba/.sbt/plugins
[info] Set current project to Hellow World (in build file:/home/csaba/Personal/Programming/NetTuts/From%20Zero%20to%20Hello%20World%20in%20Scala/Sources/)
> sbt-version
[info] 0.12.3
> scala-version
[info] 2.10.1
> exit

Как видите, Scala 2.10.1 был автоматически выбран и загружен при необходимости. Мы также обновили SBT до 0.12.3 на лету. Наконец, вы заметите, что при загрузке он называет наш проект по имени: «Установить текущий проект в Hellow World».

Даже если вы можете просто поместить все свои исходные файлы в корневой каталог проекта, SBT рекомендует и использует, как правило, структуру каталогов, аналогичную Maven. Давайте обновим наши каталоги, чтобы они выглядели как дерево ниже. Вы должны создать только каталог src и его дочерние элементы, остальные были сгенерированы, когда мы играли с командами SBT. Если это не так, не волнуйтесь, вас интересует только каталог src .

01
02
03
04
05
06
07
08
09
10
11
├── project
│  └── target
│  └── config-classes
├── src
│  ├── main
│  │  ├── resources
│  │  └── scala
│  └── test
│  ├── resources
│  └── scala
└── target

Теперь, когда мы изучили основы SBT, нам нужна IDE для написания нашего кода. Если вы предпочитаете использовать простые редакторы, такие как Sublime Text, вы можете сделать это и пропустить этот шаг.

NetBeans поддерживал Scala задолго до SBT. Существует плагин под названием «nbscala», который может создавать проекты Scala для NetBeans и использовать язык Scala, установленный в системе. В настоящий момент этот плагин переходит на SBT и в конечном итоге сможет создавать и управлять SBT-проектами.

В настоящее время SBT и NetBeans достаточно хорошо интегрируются. Единственное, что вы должны создать вручную во время написания этой статьи, это начальный проект SBT. После этого NetBeans может легко интегрироваться с ним.

Давайте откроем NetBeans, перейдем в Инструменты / Плагины , выберите вкладку Доступные плагины и прокрутите вниз до буквы S. Проверьте все плагины, связанные с Scala, нажмите « Установить» и дайте ему установить плагины со всеми необходимыми зависимостями.

Плагин Netbeans Scala

Если вам интересно, как написан этот плагин, вы можете проверить его Github-репозиторий .

Да, вы правильно прочитали, SBT имеет свою собственную систему плагинов, которая может генерировать проекты NetBeans для вас. Вам просто нужно проверить git-репозиторий и опубликовать его локально. Перейдите в каталог, где вы хотите, чтобы ваш плагин был проверен и установлен, а затем выполните следующие команды:

1
2
3
git clone git@github.com:dcaoyuan/nbsbt.git
cd nbsbt
sbt clean compile publish-local

Хорошо, мы почти закончили. У нас есть плагин, теперь нам нужно указать SBT использовать его. Вы можете сделать это для каждого проекта, если хотите, но я рекомендую добавить его в настройки SBT вашего пользователя: ~/.sbt/plugins/plugins.sbt

~ Относится к вашему домашнему каталогу, у вас уже должен быть каталог с именем .sbt (обратите внимание на точку в качестве первого символа). Вы можете иметь или не иметь каталог plugins , если нет, просто создайте его, а затем создайте файл plugins.sbt . Теперь добавьте следующее:

1
addSbtPlugin(«org.netbeans.nbsbt» % «nbsbt-plugin» % «1.0.2»)

Вот и все, теперь ваш SBT может генерировать проекты NetBeans для вас, когда вы запускаете команду netbeans в консоли SBT. Кроме того, в NetBeans вы можете просто открыть (не новый проект, а открыть) любой проект SBT, и он автоматически сгенерирует для вас материал NetBeans.

Проект NetBeans Open SBT

Затем все зависимости проекта будут обновлены, и команда netbeans будет выполняться в консоли SBT внутри NetBeans.

Консоль NetBeans SBT

Теперь вы можете видеть больше прокрутки текста на экране в зависимости от зависимостей, которые необходимо установить, и вы должны увидеть, что команда netbeans была автоматически запущена для нас.

На левой панели, на вкладке браузера проекта , вы даже можете запустить основные команды SBT, просто щелкнув правой кнопкой мыши по проекту и запустив Reload , Clean , Compile и так далее.


Теперь это не учебник для изучения Scala. Мы напишем только очень простой код, классический Hello World. Итак, вы можете продолжить и расширить свой проект Scala, и в записи «Пакеты Scala» щелкните правой кнопкой мыши <пакет по умолчанию> и выберите « Создать» -> «Scala Object» . Дайте ему имя, что-то вроде «HelloWorld» подойдет. Затем внутри него введите следующий код:

1
2
3
4
object HelloWorld {
    def main(args: Array[String]) =
        println(«Hello World!»)
}

Если вы совершенно незнакомы со Scala, объект автоматически запустится и будет найден метод с именем main . Определение метода — просто строка печати Hello World .

Перейдите на консоль SBT для этого проекта — если вы закрыли его по ошибке, просто щелкните правой кнопкой мыши проект Scala на левой панели и выберите Open sbt console . Теперь введите run в консоли, чтобы запустить программу.

Код и результаты выполнения

Первым шагом является установка Scalatest, чтобы у нас была среда тестирования. Самый простой способ сделать это — отредактировать наш файл build.sbt и добавить следующую строку; помните, что вы должны оставить пустую строку между каждой строкой.

1
libraryDependencies += «org.scalatest» %% «scalatest» % «1.9.1» % «test»

Теперь в консоли SBT вы можете выпустить обновление (необязательно) и запустить test команду. У нас пока нет никаких тестов, поэтому команда не должна провалиться.

Тест Пусто

Создать наш первый тест будет довольно легко. Единственное, что вам нужно знать, это то, что он должен находиться в папке src/test/scala . Или, если вы развернете тестовые пакеты Scala в средстве просмотра проекта и щелкните правой кнопкой мыши <пакет по умолчанию> , вы можете выбрать New -> Scala Class и создать пакет с именем «ExampleSuite» и добавить код ниже:

01
02
03
04
05
06
07
08
09
10
11
12
import org.scalatest.FunSuite
 
class ExampleSuite extends FunSuite {
 
  test(«test 2 expected values are equal») {
    assert(2 === 2)
  }
 
  test(«test 2 values are different and fail») {
    assert(2 === 3)
  }
}

Обратите внимание, что в NetBeans могут возникнуть некоторые проблемы с запуском ваших тестов, так как плагин Scala еще не завершен. Но не паникуйте, вы все равно можете запускать тесты с консоли SBT.

Тест просто импортирует Scalatest набор тестов FunSuite (где «Fun» происходит из функционала) и запускает два теста. Как вы можете понять из кода, первый пройдет, а второй потерпит неудачу.

Тесты в действии

Если по какой-то причине SBT отказывается компилировать ваши тесты, просто закройте консоль в NetBeans, щелкните правой кнопкой мыши свой проект и выберите « Обновить проект sbt» . Это решит проблему, и ваши тесты будут работать как положено.


Вот и вы! Вы только что завершили свои первые шаги в изучении Scala. Я надеюсь, что этот урок помог вам лучше понять, с чего начать. Если вместо использования Netbeans, который является моей предпочтительной IDE, вы также можете выполнить поиск в Google, чтобы найти довольно полную онлайн-документацию о том, как использовать SBT & Scala с Eclipse, если вы этого предпочитаете.

Спасибо за прочтение.