- PVSM.RU - https://www.pvsm.ru -

Scala как расширенная Java или Java++

Java существует достаточно долго, на ней написано огромное количество софта и она является лидером в своей области. Однако Java не лишена недостатков. При проектировании языка важным критерием была простота и легкость изучения языка, и эта простота заставляет писать огромное количество лишнего кода, что бы компенсировать недостаточную гибкость языка: паттерны проектирования, XML конфиги, AOP, гетеры-сеттеры, try catch finaly синтаксис и т.д. Так же очевидно что не для всех задач чистый ООП подход является оптимальным, некоторые задачи намного эффективнее выполнять в функциональном стиле.

Существует много разных языков — Groovy, Python, Ruby, JRuby и еще много других, которые потенциально могут заменить java. Так почему же именно Scala?

  • Scala очень похожа синтаксисом на Java. Практически все возможности Java в Scala реализуются точно таким же или похожим образом, благодаря этому уменьшается порог вхождения в язык.
  • Scala тоже является языком со строгой статической типизацией. Статическая типизация помогает когда над проектом начинают работать большие команды на протяжении большого промежутка времени.
  • Производительность. Согласно исследованиям [1] Scala имеет практически такую же производительность как и java. Где-то чуть быстрее, где-то медленнее, но общая картина такова что скорость выполнения кода на этих языках примерно одинакова.
  • Полная совместимость с java — библиотеками. Т.е. вы можете использовать любую библиотеку, написанную на Java в Scala, что избавляет вас от изобретения велосипедов. И так же делает переход на Scala более приятным — вы ведь все еще можете использовать старые, привычные библиотеки, API которых вам знаком.
  • Scala — более высокоуровневый язык. Вы описываете что нужно делать, а не как это нужно делать. Высокоуровневый код проще читать, писать, поддерживать и он занимает меньше места.

Теперь список главных фишек в Scala, которых нету в Java:

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

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

Высокоуровневая работа с коллекциями. Благодаря наличию замыканий для большинства манипуляций с коллекциями (отфильтровать, сделать выборку, проверить все элементы на условие, разбить на две группы и т.д) существуют отдельные методы. Это позволяет в 95% использовать уже готовые библиотечные методы, в то время когда на Java вам необходимо писать те же самые операции каждый раз самому.

Лаконичность динамического программирования. Благодаря implicit'ам, неявному выводу типов и богатому синтаксическому сахару ваш код начинает выглядеть почти так-же лаконично как если бы вы писали на динамическом языке типа Groovy или Ruby. При этом каждая переменная имеет свой тип и компилятор вам подскажет если вы будете делать что-то не так.

Меньшее количество неинформационного шума. Это как раз тот момент где общая картина складывается из мелочей. В Scala очень много моментов где она позволяет писать на несколько символов меньше. На выходе получается примерно в 2-3 раза меньше кода, чем на Java без потери читабельности!

Поддержка многих паттернов проектирования на уровне синтаксиса. Хотите синглетон — меняет слово «class» на «object», хотите фабрику — используйте конструктор со значениями по умолчанию и именными параметрами, хотите команду — просто передаете замыкание и т.д.

Заключение

Я не утверждаю что Java является абсолютным злом. Напротив это прекрасный язык, он был огромным шагом вперед для своего времени, однако время идет и все меняется, появляются новые технологии, старые устаревают. И нам, программистам, нужно двигаться вперед и изучать новые, более совершенные инструменты. И Scala отлично подходит на эту роль, она лишена большинства недостатков Java и имеет очень много новых возможностей с помощью которых программист может качественнее выражать свои мысли и значительно увеличить свою продуктивность.

Автор: mnemosha


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/16293

Ссылки в тексте:

[1] исследованиям: http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=scala&lang2=java&box=1

[2] Паттерн-матчинг: http://docs.scala-lang.org/tutorials/tour/pattern-matching.html

[3] экстракторы : http://docs.scala-lang.org/tutorials/tour/extractor-objects.html

[4] Функции высшего порядка: http://docs.scala-lang.org/tutorials/tour/higher-order-functions.html

[5] Трейты: http://docs.scala-lang.org/tutorials/tour/traits.html

[6] Кейс классы: http://docs.scala-lang.org/tutorials/tour/case-classes.html

[7] Поддержка XML: http://docs.scala-lang.org/tutorials/tour/xml-processing.html

[8] Значение параметров по умолчанию: http://docs.scala-lang.org/tutorials/tour/default-parameter-values.html

[9] именные параметры: http://docs.scala-lang.org/tutorials/tour/named-parameters.html

[10] Неявные преобразования: http://java.dzone.com/articles/implicit-conversions-scala

[11] Автоматический вывод типов: http://www.scala-lang.org/node/127