Каковы преимущества Scala? - PullRequest
       28

Каковы преимущества Scala?

35 голосов
/ 28 августа 2009

Я разработчик на Java и хочу знать, как я могу использовать Scala в своих программах на Java?

Ответы [ 5 ]

40 голосов
/ 28 августа 2009

Прочитайте Даниэль Спивак * Превосходная серия блогов о Scala. С помощью Scala вы можете хранить:

  • все ваши библиотеки Java
  • все преимущества работы на JVM (повсеместность, инструменты администрирования, профилирование, сборка мусора и т. Д.)

Но вы можете написать код Scala:

  • более краткий и понятный, чем Java (особенно с использованием более функционального стиля , например, в библиотеке коллекций)
  • имеет закрытие и функции как часть языка
  • имеет перегрузку оператора (с точки зрения использования)
  • имеет миксины (т.е. интерфейсы, которые содержат реализацию)
17 голосов
/ 28 августа 2009

Кроме того, взгляните на этот недавний пост на сайте Scala: " Исследование: стиль программирования и производительность ".

В своей статье Жиль Дюбоше описывает, как он исследовал два аспекта стиля программирования, используя отслеживание движений глаз. Он обнаружил, что в среднем на 30% быстрее понимать алгоритмы, использующие для-понимания и карты, как в Scala, а не с итеративными циклами while в Java.

И еще одна ключевая цитата из новости:

Алекс Макгуайр, который пишет критически важные проекты в Scala для энергетических компаний, говорит о Scala: «Краткость означает, что я могу видеть больше программ на одном экране. Вы можете получить намного лучший обзор. Когда у меня есть некоторая математическая модель чтобы писать на Java, мне нужно держать в голове две модели: сама математическая модель, а вторая - модель ее реализации в Java. С Scala подойдет одна модель, математическая. Гораздо более продуктивная ».

Вы можете прочитать остальную часть поста и другие связанные элементы там .

11 голосов
/ 29 октября 2012

Из моего ограниченного опыта я могу назвать несколько предельно ясных моментов на очень простом языке:

  1. Свойства. В C ++ и Java это понятие публичного «свойства» функции getter / setter было заключено во внутреннюю переменную класса, что привело к большим объемам стандартного кода. C # формализовал это как реальную языковую особенность и уменьшил большую часть шаблонного в C # 3.0 с автоматически внедряемыми свойствами. Классы Scala определяют тривиальные свойства просто как обычные значения «только чтение» или «чтение / запись». Позже класс может решить заменить их методами get или get / set, не затрагивая клиентский код. Для этого Scala предлагает самое элегантное решение с наименьшими языковыми возможностями и сложностью.

  2. Массивы используют обычные генерики. В Java / C # дженерики были добавлены в качестве запоздалой мысли и полностью разделены, но имеют пересекающиеся свойства с массивами.

  3. Scala имеет неизменный «val» в качестве первоклассной функции языка. На самом деле val похож на конечные переменные Java: верхняя ссылка неизменна, но содержимое может изменяться.

  4. Scala позволяет, если блоки, циклы for-yield и код в фигурных скобках возвращают значение. Это очень элегантно во многих ситуациях. Очень маленький плюс в том, что это устраняет необходимость в отдельном троичном операторе.

  5. В Scala есть одиночные объекты, а не статические классы C ++ / Java / C #. Это более чистое решение.

  6. Сопоставление с образцом. Распаковка объекта. Очень хорошо в большом количестве ситуаций.

  7. Родные кортежи.

  8. Постоянные неизменяемые коллекции используются по умолчанию и встроены в стандартную библиотеку.

6 голосов
/ 28 августа 2009

Я не уверен, что вы легко можете использовать Scala в своих программах на Java, как в «вызове класса Scala из класса Java».

Вы можете попробовать, следуя статье " Смешивание Java и Scala ".
Соответствующие выдержки:

Проблема в том, что шаги компиляции Java и Scala раздельные: вы не можете скомпилировать файлы Java и Scala за один раз.
Если ни один из ваших файлов Java не ссылается на какие-либо классы Scala, вы можете сначала скомпилировать все свои классы Java, а затем скомпилировать свои классы Scala.
Или, если ни один из ваших файлов Scala не ссылается на какие-либо классы Java, вы можете сделать это наоборот.
Но если вы хотите, чтобы ваши классы Java имели доступ к вашим классам Scala, а также чтобы классы Scala имели доступ к вашим классам Java, это проблема.

Код Scala может легко вызываться непосредственно в код Java, но иногда вызов кода Scala из кода Java более сложен, поскольку перевод из Scala в байт-код не так прост, как для Java:
иногда компилятор Scala добавляет символы в символы или вносит другие изменения, которые должны быть явно обработаны при вызове из Java.
Но класс Scala может реализовать интерфейс Java, и экземпляр этого класса может быть передан методу Java, ожидающему экземпляр интерфейса.
Затем класс Java вызывает методы интерфейса в этом экземпляре точно так же, как если бы это был экземпляр класса Java.

Возможно и обратное, как описано в Сводка новостей: Scala для Java-беженцев , от Даниэль Спивак .

4 голосов
/ 26 апреля 2018

Scala или Java:

Плюсы:

  • Scala поддерживает как функциональные, так и императивные стили ОО-программирования и утверждает, что обе модели не противоречат друг другу, но при этом они ортогональны и могут дополнять друг друга. Scala не требует и не заставляет программиста использовать определенный стиль, но обычно стандартом является использование функционального стиля с неизменяемыми переменными, когда это уместно (есть несколько преимуществ использования функционального подхода, таких как краткий и короткий синтаксис и использование чистых функций обычно уменьшает количество недетерминированности и побочных эффектов кода), одновременно прибегая к императивному программированию, когда код выглядит более простым или более понятным.
  • Скала не требуется; в конце каждой строки есть опция, которая приводит к более чистому коду
  • В Scala функции являются первоклассными cititzens
  • Scala поддерживает некоторые расширенные функции, которые непосредственно встроены в язык, такие как: каррирование, замыкания, функции высшего порядка, сопоставление с образцом, типы с более высоким родом, монады, неявные параметры.
  • Scala может очень хорошо взаимодействовать с Java, и оба могут сосуществовать. Можно использовать библиотеки Java непосредственно внутри кода Scala, вызывая классы Java из кода Scala.
  • Имеет встроенный кортеж на языке, который облегчает жизнь в нескольких сценариях
  • Поддерживает перегрузку операторов
  • имеет богатую экосистему, на которой основаны некоторые популярные проекты с открытым исходным кодом в Apache.
  • Асинхронный и неблокирующий код очень легко написать с помощью Scala Futures
  • Scala поддерживает модель Actor с использованием Akka, которая может быть высокоэффективной и масштабируемой при запуске распределенных приложений в многопоточных и параллельных бизнес-сценариях (принудительная инкапсуляция без использования блокировок, состояние субъектов локально и не доступно, изменения и данные распространяется через сообщение)
  • Код имеет тенденцию быть короче по сравнению с Java (может быть не всегда так)

Минусы:

  • Крутая кривая обучения по сравнению с Java и другими языками, требует от ученика больше времени в целом, чтобы ясно понять все концепции. Имеет много функций
  • Он не так хорошо зарекомендовал себя на рынке, как Java, поскольку он был изобретен позже, поэтому в целом Java более зрелая и более проверенная в бою.
  • Скала открывает слишком много дверей. Он допускает много сложного синтаксиса, который, если его использовать безответственно, может привести к коду, который трудно понять. Злоупотребление такими вещами, как перегрузка операторов, неявные параметры и другие конструкции, может привести к обратным результатам и разрушить читабельность кода.
  • Java также развивается и продолжает улучшаться с новыми версиями (например, с модулями JDK 9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...