Чем scala лучше java

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

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

  • Scala очень похожа синтаксисом на Java. Практически все возможности Java в Scala реализуются точно таким же или похожим образом, благодаря этому уменьшается порог вхождения в язык.
  • Scala тоже является языком со строгой статической типизацией. Статическая типизация помогает когда над проектом начинают работать большие команды на протяжении большого промежутка времени.
  • Производительность. Согласно исследованиям Scala имеет практически такую же производительность как и java. Где-то чуть быстрее, где-то медленнее, но общая картина такова что скорость выполнения кода на этих языках примерно одинакова.
  • Полная совместимость с java — библиотеками. Т.е. вы можете использовать любую библиотеку, написанную на Java в Scala, что избавляет вас от изобретения велосипедов. И так же делает переход на Scala более приятным — вы ведь все еще можете использовать старые, привычные библиотеки, API которых вам знаком.
  • Scala — более высокоуровневый язык. Вы описываете что нужно делать, а не как это нужно делать. Высокоуровневый код проще читать, писать, поддерживать и он занимает меньше места.
  • Паттерн-матчинг и экстракторы
  • Функции высшего порядка
  • Трейты
  • Кейс классы
  • Поддержка XML
  • Значение параметров по умолчанию и именные параметры
  • Неявные преобразования
  • Автоматический вывод типов
  • Монады
Читайте также:  Как сделать затухание css

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

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

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

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

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

Читайте также:  Menu in java script

Более понятный и структурированный код бизнес-логики. Не все можно описать на высоком уровне, бывает логика с большим количеством if /else, проверок, условий, выделением дополнительных вспомогательных методов. Благодаря паттерн-матчингу, монадам, функциям высшего порядка, вложенным методам такая логика получается в разы читабельнее. Когда в Java необходимо сделать много if / else / switch проверок в Scala можно использовать паттерн матчинг, когда в Java необходимо заимплементить интерфейс и добавить класс в конфигурацию, в Scala нужно просто передать замыкание, когда в Java идут проверки на null и обработка ошибок в Scala используются монады, когда в Java создаются классы Utils, фабрики, интерфейсы с глобальными переменными, сигнглетоны в Scala создается объект-компаньен.

Заключение

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

Источник

Из Java в Scala: 7 причин для изучения нового языка

Много свободного времени только у студентов. Если вы не студент, то должны появиться очень веские причины для того, чтобы начать изучать новый язык программирования. Особенно это касается Java-программистов, потому что этот язык является лидером в своём сегменте. Тем не менее причины для изучения нового языка есть.

Причина первая: опыт показывает, что назад не возвращаются. В своё время я писал на C/C++ больше программ, чем на любом другом языке. Потом я узнал о Java, и передо мной стоял точно такой-же вопрос: «Зачем?» Что самое интересное, я не изучал Java зачем-то, это было просто любопытство, а потом я понял что уйти обратно не получится. За свою жизнь я не видел ни одного программиста C++, изучившего Java, а потом заявившего «Нет, мне не нравится этот язык, C++ лучше». Теперь у меня какое-то дежавю: я снова не вижу ни одного Java-программиста, изучившего Scala и отказавшегося от этого языка. Думаю это достаточный показатель качества.

Причина вторая: Scala современнее. Не более модная, а технически более совершенная. В Scala учтены многие ошибки, допущенные при проектировании Java. Возьмём в качестве примера оператор эквивалентности == . Как часто вы пользуетесь им в Java? Можете не думать, отвечу за вас: вы им вообще не пользуетесь. Почему? Потому что он бесполезен. В языке, цель которого освободить разработчика от прямой работы с памятью, оператор сравнения указателей не имеет смысла. И что ещё хуже, этот оператор нельзя перегрузить. А что сделал Одерски с этим оператором в Scala? Правильно, он приравнял оператор == к equals() . Думаю никому не надо объяснять насколько первое изящнее второго:

object1 == object2 object1.equals(object2) 

Кстати я совсем не считаю, что с оператором == при проектировании Java была допущена ошибка. Во времена засилья C++ это было правильным решением, но со временем ситуация изменилась.

Причина третья: декларативность. Да-да, то самое функциональное программирование. Сейчас в мой адрес посыпется куча бранных слов, но я не буду сильно спорить. Довод у меня очень простой: я видел достаточно людей не осиливших функциональное программирование и ругающих его, но я не видел ни одного осилившего и отказавшегося. Впрочем приведу ещё один довод: если бы функциональное программирование было какой-то ерундой, оно не стало бы появляться в нашей любимой Java (вы ведь в курсе про лямбды и стримы?) Здесь кто-то непременно возразит: раз это есть в Java, зачем нам Scala? Ответ: если вы изучите Scala и посмотрите на функциональность Java с той колокольни, то открывшийся вид вполне может вызвать у вас улыбку. Просто попробуйте!

Причина четвёртая: меньше кода. Кто-то заявил, что код Scala в общем случае в 2-3 раза меньше кода Java. Сам я не считал, но заверяю, что похоже на правду. Например, наверняка многие знакомы с давним спором о том, стоит ли использовать final для локальных переменных:

String mama = "Jane"; final String papa = "John"; 

Вторая строка неизменяемая, что гарантирует её неприкосновенность, что уменьшает вероятность багов, бла-бла-бла… Но есть проблема: эта вторая строка на 28% больше первой, что означает общее разрастание кода, что увеличивает вероятность багов и т.д. А теперь смотрим сюда:

var mama = "Jane" val papa = "John" 

Этот код Scala идентичен предыдущему коду Java. Нужно ли что-то говорить?

Вот ещё более впечатляющий пример. Java:

Теперь то же самое на Scala:

class Child(val mama: String, val papa: String) 

Всё! Даже ни одной фигурной скобки не понадобилось! А теперь представьте насколько такие вот фишки (а их ещё много, поверьте!) уменьшают код большого проекта и вспомните про то, что чем короче код, тем:

  • меньше багов
  • быстрее написание
  • проще чтение
  • да и вообще это красиво!

Причина шестая: новые горизонты. Изучение языка программирования очень похоже на изучение лингвистического языка в том плане, что это позволяет открыть массу нового (при условии, что язык программирования совершенно другой, а не «yet another boring language»). Другой язык открывает доступ к иной культуре, иному мышлению. Гарантирую, что изучение Scala, особенно его функциональной части, очень сильно изменит то, как вы пишете код на Java. Разумеется к лучшему.

Причина седьмая: это интересно. Ну тут мне больше сказать нечего. Любопытство свойственно всем живым организмам, обладающим хотя-бы самым маленьким мозгом, чего уж говорить о человеке. Правда многие люди с возрастом теряют любопытство, но уверен, что среди читателей таких нет. Поэтому моя рекомендация: найдите время и поиграйтесь со Scala. Уверяю, что вы испытаете массу приятных ощущений!

Источник

Оцените статью