- PVSM.RU - https://www.pvsm.ru -
Java существует достаточно долго, на ней написано огромное количество софта и она является лидером в своей области. Однако Java не лишена недостатков. При проектировании языка важным критерием была простота и легкость изучения языка, и эта простота заставляет писать огромное количество лишнего кода, что бы компенсировать недостаточную гибкость языка: паттерны проектирования, XML конфиги, AOP, гетеры-сеттеры, try catch finaly синтаксис и т.д. Так же очевидно что не для всех задач чистый ООП подход является оптимальным, некоторые задачи намного эффективнее выполнять в функциональном стиле.
Существует много разных языков — Groovy, Python, Ruby, JRuby и еще много других, которые потенциально могут заменить java. Так почему же именно 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
Нажмите здесь для печати.