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

в 21:20, , рубрики: java, scala, метки: ,

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

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

  • Scala очень похожа синтаксисом на Java. Практически все возможности Java в Scala реализуются точно таким же или похожим образом, благодаря этому уменьшается порог вхождения в язык.
  • Scala тоже является языком со строгой статической типизацией. Статическая типизация помогает когда над проектом начинают работать большие команды на протяжении большого промежутка времени.
  • Производительность. Согласно исследованиям 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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js