Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Alex McGuire, который пишет критически важные проекты в Scala для компаний, торгующих электроэнергией, говорит о Scala. Краткость означает, что я могу видеть больше программы на одном экране. Вы можете получить гораздо лучший обзор. есть математическая модель для написания с Java, мне нужно сохранить две модели в моей голове, сама математическая модель, а вторая - модель того, как ее реализовать на Java. При использовании Scala будет использоваться одна модель, математическая. более продуктивным ".

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

Ответ 3

ОБНОВЛЕНО 2019

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

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

  2. Массивы используют обычные дженерики. В Java/С# int[] является избыточным и сбивает с толку против List<int> или List<Int>. Хуже того, в Java List<Int> много накладных расходов во время выполнения, поэтому многие разработчики должны знать, чтобы использовать int[]. Scala избегает этой проблемы. Кроме того, в Java/С# поддержка массивов (ковариант) приведена, что было ошибкой, которую они теперь не могут исправить из-за устаревших проблем.

  3. Scala имеет лучшую поддержку неизменности. val - это базовая языковая функция.

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

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

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

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

  8. "case-классы", которые большинство других языков называют типами записей или именованными кортежами.

  9. Стандартная библиотека с более элегантными коллекциями.

  10. Многострочные строки. Форматирование интерполяции строки.

  11. Необязательные точки с запятой.

Минусы.

  1. Ява многое догнала. Java 8 была впервые выпущена в 2014 году, но потребовалось несколько лет для того, чтобы старые версии Java были выведены из эксплуатации и полностью использованы новые функции Java 8 во всей экосистеме Java. Теперь лямбды и замыкания, а также базовые функциональные коллекции с поддержкой фильтра/карты/складывания являются стандартными для экосистемы Java. Позже Java добавила базовый вывод типа локальной переменной var и имеет многострочные строки и выражения переключения в режиме предварительного просмотра сборок.

  2. Scala сложная. Я бы выделил такие функции, как implicits, чтобы они были запутанными.

  3. Scala имеет минимальную обратную совместимость. Артефакты Scala 2.10 несовместимы с Scala 2.11.

  4. Создание Java API для других разработчиков языка JVM, таких как Scala, Clojure или Kotlin, является нормой, хорошо поддерживается и принимается. Как правило, вы не хотите создавать API-интерфейсы в Scala, предназначенные для разработчиков не из Scala.

Ответ 4

Я не уверен, что вы можете легко использовать 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.

Противоположно, конечно, как описано в Roundup: Scala для Java Refugees, от Даниэль Спивак.

Ответ 5

Scala или Java:

Плюсы:

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

Минусы:

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

Ответ 6

Вот некоторые преимущества использования Scala:

  • Функциональное решение проблемы всегда лучше. Это мое личное мнение и открыто для раздора. Исключение мутации из кода приложения позволяет приложению запускаться параллельно по хостам и ядрам без каких-либо взаимоблокировок.
  • Лучше concurrency модель: Scala имеет модель Actor, которая лучше, чем Java-модель блокировок в потоке.
  • Конкретный код: Scala код более краткий, чем его более многословный кузен, Java.
  • Тип безопасности/статическая типизация: Scala выполняет проверку типов во время компиляции.
  • Соответствие шаблону. Операторы case в Scala являются супермощными.
  • Наследование: свойства mixin превосходны, и они определенно уменьшают повторение кода.
  • Синтаксис языка для доменного языка (DSL): Scala позволяет программисту писать естественный DSL. Эта способность была тщательно встроена в оригинальный дизайн языка. Это очень мощная функция Scala. Scala test/specs построят поверх этой функции.