Статьи

Знакомство со Скалой

Есть много рекламируемых преимуществ языка программирования Scala , особенно для разработчиков Java . Среди прочего, рекламируемые преимущества и преимущества Scala включают следующее:

  • Работает на виртуальной машине Java ( JVM )
    • Способен работать на многочисленных платформах оборудования и операционных систем.
    • Доступ к богатому набору библиотек и функциональности в JDK
    • Доступ к широкой экосистеме Java и ее богатству библиотек и сред с открытым исходным кодом
    • Доступ к функциям JVM, таким как поддержка и оптимизация параллелизма
  • Поддержка функциональных и объектно-ориентированных парадигм
  • Статически Типизированный
  • Краткий синтаксис
  • Документация
  • зрелость

Преимущество, которое Scala предлагает при работе на JVM, такое же, как и для других многочисленных языков, работающих на JVM, таких как Groovy , Jython , JRuby , Clojure и Kotlin . Тем не менее, весь набор предложений Scala отличает его от других языков.

Одна из особенностей Scala, которая отличает его от некоторых других языков на основе JVM — это статическая типизация и статическая компиляция. Groovy 2.0 представляет статическую компиляцию для Groovy, но некоторые другие языки на основе JVM не включают статическую типизацию и статическую компиляцию, потому что язык, который они эмулируют (например, Ruby или Python ), не является статическим. Многие разработчики предпочитают динамическую типизацию , но для тех из нас, кто пользуется преимуществами статической компиляции и чувствует себя комфортно с годами разработки на C , C ++ и Java, это желанный атрибут Scala. Статическая типизация не только позволяет компилятору выполнять больше работы за меня, но и облегчает разработку лучших инструментов для языка.

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

Одна из сильных сторон Scala, которая привлекает меня больше всего, — это тщательная документация, построенная вокруг этого языка. Документация имеет тенденцию быть четкой и актуальной. Например, в документе « Начало работы со Scala» четко и кратко объясняется, как настроить Windows или Linux / Unix для среды Scala, как запустить интерпретатор Scala , как создать сценарий Scala , как скомпилировать Scala и как выполнить код Scala . Все это хорошо описано в двух печатных страницах.

Получить и настроить Scala легко, особенно если у вас уже установлена ​​версия Java SDK (Java SE 1.6 или более поздняя версия). Scala можно загрузить со страницы распространения Scala . Для загрузки доступно несколько форматов, и я скачал ZIP-файл Scala 2.10.1 для Windows. «Установка» была такой же простой, как распаковка содержимого ZIP-файла в мою папку C:\scala-2.10.1 . Я создал системную переменную окружения SCALA_HOME которая указывает на этот каталог, а затем добавил %SCALA_HOME%\bin в переменную окружения Path моей системы. Причина, по которой я определил SCALA_HOME среды SCALA_HOME для использования в моем пути вместо непосредственного включения установки Scala непосредственно в путь, заключается в том, что я могу легко изменить версию Scala в будущем, просто изменив настройку SCALA_HOME (это также способ при необходимости переключаться между несколькими версиями Scala, установленными на одном компьютере. Обратите внимание, что в системах Linux / Unix ${SCALA_HOME} будет использоваться вместо %SCALA_HOME% .

С загруженным архивным файлом Scala, извлеченным в каталог в моей системе, чей подкаталог «bin» находится на моем пути, я могу теперь открыть терминал, чтобы проверить, правильно ли настроена Scala. Это показано на следующем снимке экрана, где я использую команду scala -version чтобы увидеть версию Scala, которая была установлена ​​и настроена.

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

Справочная информация для ссылок на Scala Launcher ( scala ) поддерживает все параметры, поддерживаемые компилятором Scala ( scalac ). На следующем снимке экрана показано выполнение этой команды, чтобы увидеть те многочисленные параметры, которые применимы как к scalac и к scala .

Ввод «scala» в командной строке без опции открывает интерпретатор Scala . Это показано на следующем снимке экрана.

Доступ к интерпретатору Scala позволяет мне легко начать играть со Scala. Сейчас я воспользуюсь переводчиком, чтобы взглянуть на некоторые основы Scala. На следующем снимке экрана показано, как произвольное выражение может быть введено в интерпретатор Scala и, если он имеет правильный синтаксис, будет обработано и автоматически назначено переменной с именем «res0». В этом случае сумма добавления 5 к 6 устанавливается на «res0». Затем переменную «res0» можно использовать в следующей оценке, добавив к ней два. Эта сумма, 13, затем автоматически присваивается «res1». Когда я пытаюсь переназначить автоматически сгенерированный «res0» на значение 4, я вижу сообщение об ошибке: «error: переназначение в val».

Только что показанная ошибка демонстрирует одну из вещей, которые мне нравятся в Scala; это позволяет дифференцировать переменные и константы (часто упоминаемые как изменяемые и неизменные значения ). Ключевое слово val неявно присутствует в неявно созданных значениях. Однако разработчик Scala, который объявляет свои собственные переменные и константы, может явно использовать ключевое слово «val» для указания константы и явно использовать « var » для указания переменной. Это продемонстрировано на следующем снимке экрана.

Чтобы завершить мой пост «Введение в Scala», необходимо включить пример « Hello, World » в Scala. Этот пример фактически представлен в уже упомянутом превосходном Приступая к работе с Scala , но я включил его здесь для удобства и чтобы показать, как компилировать и выполнять исходный код Scala.

HelloWorld.scala

1
2
3
4
5
6
7
object HelloWorld
{
   def main(args: Array[String])
   {
      println("Hello, world!")
   }
}

Из этого простого кода можно сделать несколько замечаний: Scala позволяет использовать новое ключевое слово « object » для указания объекта Scala (экземпляр singleton) и объявляет имя аргумента ДО типа аргумента (то же самое). применяется к объявлениям локальной переменной / константы). Пример кода также показывает, что, как и Groovy, Scala не требует, чтобы java.lang.System.out был явно импортирован статически, или System.out.println, который должен быть прописан при каждом использовании, использует ключевое слово « def » для определения основного метод, и не требует точек с запятой, если каждый оператор имеет свою собственную строку.

На следующем снимке экрана показано содержимое моего исходного файла HelloWorld.scala, показано, как запустить приложение Scala без явного шага компиляции (оно неявно компилируется), показано, как компилировать этот исходный код с помощью scalac HelloWorld.scala , показаны два сгенерированных файла .class которые В результате процесса компиляции показано, как снова запускается простое приложение Scala с scala HelloWorld .

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

Ссылка: Знакомство со Scala от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events .